java poi生成数据透视表

/**
     * 导出EXCEL---poi
     */
    @Override
    public void pivot(HttpServletResponse response) throws Exception{
        //创建excel在内存中 .xls
        Workbook wb = new XSSFWorkbook();
        //创建一个sheet页
        Sheet sheet = wb.createSheet("患者信息一览表");
//        //获取单元格格式信息
        ExcelCellPojo pojo = new ExcelCellPojo(wb);
        //表头
        String[] headStr={"id","入ICU时间","出院时间","转科时间","诊断情况","转归","呼吸机使用","高流量","PICCO","ECMO","CRRT"};
        //开始的行号
        int rowIndex=0;
        //创建标题栏
        Row title =sheet.createRow(rowIndex);
        //设置行高
        title.setHeightInPoints(75);
        title.createCell(0).setCellValue("患者信息一览表");
        title.getCell(0).setCellStyle(pojo.getTitleCellStyle());
        //创建合并单元格
        CellRangeAddress cra=new CellRangeAddress(0,0,0,headStr.length-1);
        sheet.addMergedRegion(cra);
        // 下边框
        RegionUtil.setBorderBottom(BorderStyle.THIN, cra, sheet);
        // 左边框
        RegionUtil.setBorderLeft(BorderStyle.THIN, cra, sheet);
        // 有边框
        RegionUtil.setBorderRight(BorderStyle.THIN, cra, sheet);
        // 上边框
        RegionUtil.setBorderTop(BorderStyle.THIN, cra, sheet);
        //创建表头的一行
        Row header = sheet.createRow(++rowIndex);
        //设置行高
        header.setHeightInPoints(60);
        //循环创建表头赋值
        for (int i = 0; i < headStr.length; i++) {
            //设置列宽度 -第1列
            sheet.setColumnWidth(i,5400);
            //创建表头第一列并且赋值
            header.createCell(i).setCellValue(headStr[i]);
            //设置单元格样式
            header.getCell(i).setCellStyle(pojo.getHeaderStyle());
        }
        //查询数据
        List patientList = super.selectAll();
        for (TestPatientInf patientInf:patientList) {
            ++rowIndex;
            //从第2行开始创建
            Row row = sheet.createRow(rowIndex);
            row.setHeightInPoints(40);
            row.createCell(0).setCellValue(patientInf.getId());
            row.getCell(0).setCellStyle(pojo.getCellStyle());
            row.createCell(1).setCellValue(patientInf.getIcuTimeIn());
            row.getCell(1).setCellStyle(pojo.getDateCellStyle());
            row.createCell(2).setCellValue(patientInf.getDischargeTime());
            row.getCell(2).setCellStyle(pojo.getDateCellStyle());
            row.createCell(3).setCellValue(patientInf.getCollegeTime());
            row.getCell(3).setCellStyle(pojo.getDateCellStyle());
            row.createCell(4).setCellValue(patientInf.getDiagnosis());
            row.getCell(4).setCellStyle(pojo.getCellStyle());
            row.createCell(5).setCellValue(patientInf.getOutcome());
            row.getCell(5).setCellStyle(pojo.getCellStyle());
            row.createCell(6).setCellValue(StringUtil.isNullOrBlank(patientInf.getHxjsy())?"无":patientInf.getHxjsy());
            row.getCell(6).setCellStyle(pojo.getCellStyle());
            row.createCell(7).setCellValue(StringUtil.isNullOrBlank(patientInf.getGll())?"无":patientInf.getGll());
            row.getCell(7).setCellStyle(pojo.getCellStyle());
            row.createCell(8).setCellValue(patientInf.getPicco()==null?0:patientInf.getPicco());
            row.getCell(8).setCellStyle(pojo.getDoubleCellStyle());
            row.createCell(9).setCellValue(patientInf.getEcmo()==null?0:patientInf.getEcmo());
            row.getCell(9).setCellStyle(pojo.getCellStyle());
            row.createCell(10).setCellValue(patientInf.getCrrt()==null?0:patientInf.getCrrt());
            row.getCell(10).setCellStyle(pojo.getCellStyle());
        }

        //创建数据透视表--新的sheet页码
        //为需要汇总和创建分析的数据创建缓存
        XSSFSheet pivotSheet  = (XSSFSheet)wb.createSheet("患者信息透视表");
        //左边起始单元格
        CellReference leftStart=new CellReference(ExcelUtils.getCellLocation(2,1));
        //右边结束单元格
        CellReference rightEnd=new CellReference(ExcelUtils.getCellLocation(rowIndex+1,headStr.length));
        // 数据透视表生产的起点单元格位置
        CellReference ptStartCell = new CellReference("A4");
        //创建数据透视表格
        AreaReference area = new AreaReference(leftStart, rightEnd, SpreadsheetVersion.EXCEL2007);
        XSSFPivotTable pivotTable = pivotSheet.createPivotTable(area,ptStartCell,sheet);
        //头上的列标签
        pivotTable.addColLabel(1);
        //透视表 列值
        pivotTable.addColumnLabel(DataConsolidateFunction.COUNT, 0,"计数项:入ICU时间");
        pivotTable.addColumnLabel(DataConsolidateFunction.SUM, 8,"求和项:PICCO");
        //透视表 行标签
        pivotTable.addRowLabel(0);
        //透视表 行的值
        pivotTable.addRowLabel(1);
        pivotTable.addRowLabel(2);
        pivotTable.addRowLabel(3);
        pivotTable.addRowLabel(4);
        ExcelUtils.exportExcel(wb,"test_aaa.xlsx",response);
    }
package cn.com.zhengya.framework.utils.excel.entity;

import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.ss.usermodel.*;

/**
 * Excel默认样式
 * @author  luwl
 */
public class ExcelCellPojo {
    /**
     * 表头样式
     */
    private CellStyle headerStyle;
    /**
     * 默认单元格样式
     */
    private CellStyle cellStyle;
    /**
     * 标题栏样式
     */
    private CellStyle titleCellStyle;
    /**
     * 日期单元格样式
     */
    private  CellStyle dateCellStyle;
    /**
     * 数字类型单元格样式
     */
    private CellStyle doubleCellStyle;

    public ExcelCellPojo(Workbook wb){
        this.setHeaderStyle(wb);
        this.setCellStyle(wb);
        this.setDateCellStyle(wb);
        this.setTitleCellStyle(wb);
        this.setDoubleCellStyle(wb);
    }

    public CellStyle getHeaderStyle() {
        return headerStyle;
    }

    public CellStyle getCellStyle() {
        return cellStyle;
    }

    public CellStyle getDateCellStyle() {
        return dateCellStyle;
    }

    public CellStyle getTitleCellStyle() {
        return titleCellStyle;
    }

    public CellStyle getDoubleCellStyle() {
        return doubleCellStyle;
    }

    private void setHeaderStyle(Workbook wb){
        // 生成表头单元样式
        headerStyle = wb.createCellStyle();
        //表头样式
        headerStyle.setFillForegroundColor((short)1);
        headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        //表头边框
        headerStyle.setBorderBottom(BorderStyle.THIN);
        headerStyle.setBorderLeft(BorderStyle.THIN);
        headerStyle.setBorderRight(BorderStyle.THIN);
        headerStyle.setBorderTop(BorderStyle.THIN);
        //水平方向-居中对齐
        headerStyle.setAlignment(HorizontalAlignment.CENTER);
        //垂直方向-垂直居中
        headerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        //字体
        Font font = wb.createFont();
        //字体大小
        font.setFontHeightInPoints((short) 16);
        //字体加粗
        font.setBold(true);
        headerStyle.setFont(font);
    }

    private void setCellStyle(Workbook wb){
        // 生成单元格式样(基础式样)
        cellStyle = wb.createCellStyle();
        cellStyle.setBorderBottom(BorderStyle.THIN);
        cellStyle.setBorderLeft(BorderStyle.THIN);
        cellStyle.setBorderRight(BorderStyle.THIN);
        cellStyle.setBorderTop(BorderStyle.THIN);
        //水平方向-居中对齐
        cellStyle.setAlignment(HorizontalAlignment.CENTER);
        //垂直方向-垂直居中
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        cellStyle.setWrapText(true);
    }

    private void setDateCellStyle(Workbook wb){
        // 生成单元格式样-日期类型(yyyy/mm/dd日期格式)
        dateCellStyle = wb.createCellStyle();
        dateCellStyle.cloneStyleFrom(this.cellStyle);
        DataFormat format = wb.createDataFormat();
        dateCellStyle.setDataFormat(format.getFormat("yyyy/mm/dd"));
    }

    private void setTitleCellStyle(Workbook wb) {
        //生成标题单元格样式
        titleCellStyle = wb.createCellStyle();
        //表头样式
        titleCellStyle.setFillForegroundColor((short)1);
        titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        //表头边框
        titleCellStyle.setBorderBottom(BorderStyle.THIN);
        titleCellStyle.setBorderLeft(BorderStyle.THIN);
        titleCellStyle.setBorderRight(BorderStyle.THIN);
        titleCellStyle.setBorderTop(BorderStyle.THIN);
        //水平方向-居中对齐
        titleCellStyle.setAlignment(HorizontalAlignment.CENTER);
        //垂直方向-垂直居中
        titleCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        //字体
        Font font = wb.createFont();
        //字体大小
        font.setFontHeightInPoints((short) 20);
        titleCellStyle.setFont(font);
    }

    private void setDoubleCellStyle(Workbook wb) {
        // 生成单元格式样(基础式样)
        doubleCellStyle = wb.createCellStyle();
        doubleCellStyle.setBorderBottom(BorderStyle.THIN);
        doubleCellStyle.setBorderLeft(BorderStyle.THIN);
        doubleCellStyle.setBorderRight(BorderStyle.THIN);
        doubleCellStyle.setBorderTop(BorderStyle.THIN);
        //水平方向-居中对齐
        doubleCellStyle.setAlignment(HorizontalAlignment.CENTER);
        //垂直方向-垂直居中
        doubleCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        doubleCellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
        doubleCellStyle.setWrapText(true);
    }

}
/**
     * Http导出Excel
     * @param response
     */
    public static void exportExcel(Workbook wb,String fileName,HttpServletResponse response){
        response.reset();
        response.setContentType("application/vnd.ms-excel;charset=utf-8");
        OutputStream out = null;
        try {
            // 通过流将excel写出
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            wb.write(bos);
            byte[] bytes = bos.toByteArray();
            // 获取输出流
            out = response.getOutputStream();
            // 设置头信息
            response.setContentLength(bytes.length);
            response.setHeader("Content-disposition", "attachment;filename="
                    + new String(fileName.getBytes("GBK"), "ISO8859-1"));
            // 通过流将excel写出
            wb.write(out);
            wb.close();
            out.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (out != null) {
                    out.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
org.apache.poi
            poi
            4.0.1

            org.apache.poi
            poi-ooxml
            4.0.1

Original: https://www.cnblogs.com/Sora-L/p/13220596.html
Author: 雨梦大木
Title: java poi生成数据透视表

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/620276/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • SpringSecurity

    SpringSecurity 11.1 SpringSecurity简介 Spring 是一个非常流行和成功的 Java 应用开发框架。Spring Security 基于 Spr…

    Java 2023年6月5日
    076
  • 分页SQL语句的性能比较

    数据量暂时在10来万,排序字段是几个索引里面的一个索引的二级索引第一方案是比较传统的,第二方案用了表变量,有说数据量大的时候应该用临时表,不知道这个量要多少。感觉。。 DECLAR…

    Java 2023年6月14日
    072
  • ThreadLocal = 本地线程?

    一、定义 ThreadLocal是 JDK包提供的,从名字来看, ThreadLocal意思就是本地线程的意思。 1.1 是什么? 要想知道他是个啥,我们看看 ThreadLoca…

    Java 2023年6月6日
    0116
  • Java 从源码文件(.java)到代码执行过程发生了什么?

    我们都知道 Java 是一门一次编译到处运行的语言,这与 JVM 有很大的关系,当我们执行 Java 程序的时候,会把一个一个的 .java 文件转化成 JVM 可以理解的 cla…

    Java 2023年6月8日
    0106
  • 组合总和 II

    题目介绍 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates…

    Java 2023年6月8日
    0133
  • Dubbo3 源码系列 — 环境准备

    Dubbo3 源码系列 — 环境准备 前言工作中一直使用Dubbo项目,借着这次机会通过源码的方式来学习下Dubbo的源码内容。目前市面上很多都是的Dubbo2系列的教…

    Java 2023年6月10日
    0103
  • 七种java字符串拼接详解

    01、”+”号操作符 要说姿势,”+”号操作符必须是字符串拼接最常用的一种了,没有之一。 我们把这段代码使用 JAD 反编译一下: …

    Java 2023年5月29日
    083
  • rabbitmq报错:not_a_dets_file,”/var/lib/rabbitmq/mnesia/rabbit@Sfabrici-Demo01/recovery.dets”的解决办法

    1,故障现象,rabbitmq无法启动,报错截图如下: 2,解决办法:删除掉这个文件 (base) root@Sfabrici-Demo01:/usr/lib/rabbitmq/b…

    Java 2023年5月30日
    097
  • 心存好奇,心怀敬意

    走出舒适圈难,是因为走出去,除了要吃学习的苦,还要忍受心里的苦。 看到郭德纲的一段话: 从出生就挨打,一天八个嘴巴。这到 25 岁,铁罗汉活金刚一样,什么都不在乎。吃亏要趁早,一帆…

    Java 2023年6月16日
    093
  • 2021年末总结

    一眨眼,距离上次写作已经两月有余。自己偷懒+繁忙,一直停滞下来,没有行动。这次得抓住年末的小尾巴,来一篇总结性的文章,对2021年的生活、工作画上一个完满的句号。 一、2021 去…

    Java 2023年6月15日
    0103
  • Java偏向锁浅析

    顾名思义,偏向锁会偏向第一个访问锁的线程。 如果在接下来的运行过程中,该锁没有被其他线程访问,这持有偏向锁的线程将永远不需要同步 如果在运行过程中,遇到了其他线程抢占锁,则持有偏向…

    Java 2023年6月13日
    083
  • 接口访问频率限流

    快速开始:四、代码实现 -> 6.配置RateLimit注解,使限流生效 一、限流场景 淘宝秒杀活动,限1小时200件商品 一个用户、一个手机号一天只能获取5次验证码 限制某…

    Java 2023年6月15日
    065
  • RocketMQ配置启动

    修改JVM默认配置(物理机器内存为8G) [root@localhost rocketmq-4.9.3]# vi bin/runserver.shJAVA_OPT=”$…

    Java 2023年5月30日
    091
  • Spring系列22:Spring AOP 概念与快速入门篇

    本文内容 Spring AOP含义和目标 AOP相关概念 声明式AOP快速入门 编程式创建代理对象 Spring AOP含义和目标 OOP: Object-oriented Pro…

    Java 2023年6月5日
    0106
  • JSON学习笔记

    json 是一种轻量级(相对于XML)的数据交换格式。通俗的讲,json就是一种特定的格式。 JSON的使用 json 是由键值对组成,并且由花括号(大括号)包围。每个键由引号引起…

    Java 2023年6月8日
    063
  • 使用http代理,解决Java对外请求需固定ip问题

    背景:对接第三方接口,第三方为安全考虑,需要固定ip设置白名单。公司对外使用动态ip。 办法: 购买一台ip固定的服务器,比如云虚拟服务器。搭建http代理服务器,比如prioxy…

    Java 2023年5月29日
    085
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球