You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Apache POI Workbook在同一工作表按公司分页打印Excel并重复表头

Apache POI实现同一工作表按公司分页+重复表头打印

要实现同一工作表内不同公司数据分页打印、每页重复表头的效果,直接通过设置打印重复行和插入分页符就能搞定,具体操作如下:

1. 设置打印时重复表头

用Sheet.setRepeatingRows()方法指定表头的行范围,注意POI里行索引从0开始,对应Excel界面的行号要加1。比如表头在Excel第1行,对应POI的行索引是0,代码示例:

// 创建工作表
XSSFSheet sheet = workbook.createSheet("公司数据");
// 设置打印时重复Excel第1行(即POI的0行)作为表头
sheet.setRepeatingRows(CellRangeAddress.valueOf("1:1"));

2. 按公司分组插入分页符

前提是你的数据已经按公司分组排序完成,每处理完一个公司的所有数据后,在该公司最后一行的下方插入分页符。比如A公司数据最后一行的POI索引是lastRowIndex,插入分页符的代码:

// 在lastRowIndex行之后插入分页符,下一页从此行的下一行开始
sheet.insertRowBreak(lastRowIndex);

完整示例代码片段

XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("公司数据");

// 写入表头行
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("公司名称");
headerRow.createCell(1).setCellValue("员工姓名");
headerRow.createCell(2).setCellValue("部门");
// 设置打印重复表头
sheet.setRepeatingRows(CellRangeAddress.valueOf("1:1"));

// 模拟按公司分组好的测试数据
List<List<String>> companyDataList = Arrays.asList(
    Arrays.asList("A公司", "张三", "技术部"),
    Arrays.asList("A公司", "李四", "财务部"),
    Arrays.asList("B公司", "王五", "人事部"),
    Arrays.asList("B公司", "赵六", "技术部"),
    Arrays.asList("C公司", "孙七", "财务部")
);

int currentRow = 1;
String currentCompany = null;
for (List<String> rowData : companyDataList) {
    String companyName = rowData.get(0);
    Row dataRow = sheet.createRow(currentRow);
    dataRow.createCell(0).setCellValue(companyName);
    dataRow.createCell(1).setCellValue(rowData.get(1));
    dataRow.createCell(2).setCellValue(rowData.get(2));
    
    // 判断是否切换到新公司,是则给上一个公司的最后一行插入分页符
    if (!companyName.equals(currentCompany)) {
        if (currentCompany != null) {
            sheet.insertRowBreak(currentRow - 1);
        }
        currentCompany = companyName;
    }
    currentRow++;
}
// 最后一个公司无需插入分页符,避免出现空白页

// 输出Excel文件
try (FileOutputStream fos = new FileOutputStream("公司数据.xlsx")) {
    workbook.write(fos);
} catch (IOException e) {
    e.printStackTrace();
}

注意事项

  • 必须确保数据已按公司名称分组排序,否则分页逻辑会混乱
  • 分页符要插在每个公司数据的最后一行之后,不要碰表头行
  • 如果使用HSSFWorkbook(.xls格式),方法完全一致,仅类名不同

内容的提问来源于stack exchange,提问作者Daniel0909

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 14:50:22