Java 报表Apache POI API与实现数据行分组折叠

官方地址:http://poi.apache.org/apidocs/

Apache POI - Javadocs

Apache POI Javadocs

可以在此处在线访问 Apache POI的最新(开发)版本的Javadoc ,或者 通过运行javadocs Ant任务从源代码检出构建。在 最新的(开发)的Javadoc正在每隔几个星期更新一次,所以可能会稍微滞后于最新的发展。

对于最新版本,最新稳定版本的Javadocs,每个家庭也可以在线浏览:

旧版本

对于Apache POI的每个版本,该版本的特定Javadoc随该版本一起提供。

Maven / Gradle / IDE用户可以从Maven Central(或您首选的Maven镜像)获取​​每个Apache POI jar的javadoc。这些可用于javadoc分类器,例如group:'org.apache.poi',name:'poi',version:'4.1.0',classifier:'javaodc'

如果您已下载二进制(bin)版本,则可以在/ docs / apidocs / 文件夹中找到下载中的Javadoc 。

如果您已下载源(src)版本,则需要构建自己的副本。运行javadocs ant任务以构建Javadoc,构建将告诉您最后的输出目录(它在POI版本之间略有不同)。

由POI开发人员

数据行分组折叠显示

请参看:sheet API

/**
     * 测试POI导出折叠行数据
     */
    @SuppressWarnings("rawtypes")
    @RequestMapping("/exportCollapsed.do")
    public void exportCollapsed(HttpServletRequest request, HttpServletResponse response) {
        //设置允许跨域访问
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods","POST");
        response.setHeader("Access-Control-Allow-Headers","x-requested-with,content-type");
        try {
            List<Map<String,Object>> list =new ArrayList<Map<String,Object>>();
            Map<String,Object> map=null;
            for (int i = 0; i <20; i++) {
                map=new HashMap<String, Object>();
                map.put("ID", i);
                map.put("PID", i==0?0:(i<5?1:i/5));
                map.put("NAME", "NAME"+i);
                map.put("DESC", "DESC"+i);
                list.add(map);
            }

            String[] showName = { "编号", "名称",  "信息描述", "父节点"  };
            List<List<Cell>> dataList = new ArrayList<List<Cell>>();
            List<Cell> cellList = new ArrayList<Cell>();
            if (list.size() > 0) {
                for (int i = 0,j=list.size(); i < j; i++) {
                    cellList = new ArrayList<Cell>();
                    cellList.add(new Cell(((Map)list.get(i)).get("ID").toString()));
                    cellList.add(new Cell(((Map)list.get(i)).get("NAME").toString()));
                    cellList.add(new Cell(((Map)list.get(i)).get("DESC").toString()));
                    cellList.add(new Cell(((Map)list.get(i)).get("PID").toString()));
                    dataList.add(cellList);
                }
            }
            HSSFWorkbook workbook=ExportExcelUtil.createWorkbook(dataList, showName);
            HSSFSheet sheet = workbook.getSheet("sheet1");
            // 设置折叠参数
            sheet.groupRow(2, 8);
            sheet.groupRow(3, 4);
            sheet.groupRow(10, 15);
            sheet.setRowGroupCollapsed(3, true);
            sheet.setRowGroupCollapsed(10, true);
            String fileName = ExportExcelUtil.getFileName("行数据可折叠分组报表示例");
            ExportExcelUtil.workbook2InputStream(workbook,fileName,response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 注:POI支持多行折叠分组显示。导出文件中文名乱码问题:

// 解决中文乱码问题==有的windows依旧乱码=====华为服务器windows server 2016系统
fileName = URLEncoder.encode(fileName,"UTF-8");
fileName= new String(fileName.getBytes("gbk"), "iso8859-1");

在使用POI实现多级表头时,我们需要注意以下几点: 1.表头需要合并单元格:多级表头通常需要将多个单元格合并成一个单元格,以显示表头的层级结构。 2.表头需要设置样式:表头的样式通常需要与正文区域有所区别,我们可以通过POI提供的样式设置方法来设置表头的样式,比如字体、颜色、边框等。 3.表头需要动态生成:如果表头的层级结构比较复杂,我们需要动态生成表头,以适应不同的数据源。 下面是一个示例代码,演示了如何使用POI实现两级表头: ``` Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); // 创建表头 Row headerRow1 = sheet.createRow(0); Row headerRow2 = sheet.createRow(1); // 设置表头样式 CellStyle headerCellStyle = workbook.createCellStyle(); headerCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); headerCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerCellStyle.setAlignment(HorizontalAlignment.CENTER); headerCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); headerCellStyle.setBorderTop(BorderStyle.THIN); headerCellStyle.setBorderBottom(BorderStyle.THIN); headerCellStyle.setBorderLeft(BorderStyle.THIN); headerCellStyle.setBorderRight(BorderStyle.THIN); // 创建表头单元格 Cell headerCell11 = headerRow1.createCell(0); headerCell11.setCellValue("第一级表头"); headerCell11.setCellStyle(headerCellStyle); Cell headerCell12 = headerRow1.createCell(1); headerCell12.setCellValue(""); headerCell12.setCellStyle(headerCellStyle); Cell headerCell13 = headerRow1.createCell(2); headerCell13.setCellValue(""); headerCell13.setCellStyle(headerCellStyle); Cell headerCell21 = headerRow2.createCell(1); headerCell21.setCellValue("第二级表头1"); headerCell21.setCellStyle(headerCellStyle); Cell headerCell22 = headerRow2.createCell(2); headerCell22.setCellValue("第二级表头2"); headerCell22.setCellStyle(headerCellStyle); // 合并表头单元格 sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2)); sheet.addMergedRegion(new CellRangeAddress(1, 1, 1, 2)); // 填充正文区域 // ... // 输出Excel文件 FileOutputStream outputStream = new FileOutputStream("example.xlsx"); workbook.write(outputStream); workbook.close(); outputStream.close(); ``` 在上面的代码中,我们首先创建了两表头,分别表示两级表头。然后,我们通过设置样式,创建单元格,并合并单元格,完成了表头的设置。最后,我们可以填充正文区域,并将Excel文件输出到磁盘上。 需要注意的是,这只是一个简单的示例代码,实际应用中可能需要更加复杂的表头设置,但基本思路是类似的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值