在使用 EasyPOI 导出 Excel 时,生成多个 Sheet 且每个 Sheet 的表头是动态的(即每个 Sheet 的列数和列名可能不同),可以通过如下方式实现:
✅ 实现原理简述
使用 Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, dataList)
生成 Sheet 表格,并在一个 Workbook
中添加多个 Sheet。
- 动态表头:通过
List<ExcelExportEntity>
定义每个 Sheet 的表头。 - 多个 Sheet:循环添加多个 Sheet,每次生成一个新的
Sheet
并添加到Workbook
中。
✅ 示例代码:多个动态表头的 Sheet
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.vo.MapExcelConstants;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.ExcelExportEntity;
import org.apache.poi.ss.usermodel.Workbook;import java.io.FileOutputStream;
import java.util.*;public class MultiSheetDynamicHeaderExport {public static void main(String[] args) throws Exception {Workbook workbook = createWorkbookWithMultipleSheets();try (FileOutputStream fos = new FileOutputStream("多Sheet导出示例.xlsx")) {workbook.write(fos);}}public static Workbook createWorkbookWithMultipleSheets() {Workbook workbook = null;// Sheet1 表头和数据List<ExcelExportEntity> header1 = new ArrayList<>();header1.add(new ExcelExportEntity("姓名", "name"));header1.add(new ExcelExportEntity("年龄", "age"));List<Map<String, Object>> data1 = new ArrayList<>();Map<String, Object> row1 = new HashMap<>();row1.put("name", "张三");row1.put("age", 20);data1.add(row1);ExportParams params1 = new ExportParams("第一个Sheet", "学生信息", ExcelType.XSSF);workbook = ExcelExportUtil.exportExcel(params1, header1, data1);// Sheet2 表头和数据(不同)List<ExcelExportEntity> header2 = new ArrayList<>();header2.add(new ExcelExportEntity("课程名", "course"));header2.add(new ExcelExportEntity("分数", "score"));List<Map<String, Object>> data2 = new ArrayList<>();Map<String, Object> row2 = new HashMap<>();row2.put("course", "数学");row2.put("score", 95);data2.add(row2);ExportParams params2 = new ExportParams("第二个Sheet", "课程成绩", ExcelType.XSSF);ExcelExportUtil.exportExcel(params2, header2, data2, workbook);return workbook;}
}
✅ 补充说明
📌 ExcelExportEntity
是动态列的关键
你可以在运行时动态构建 ExcelExportEntity
列表,例如读取数据库字段、前端配置字段等。
📌 每个 Sheet 的结构独立
只要用不同的 List<ExcelExportEntity>
+ List<Map<String, Object>>
数据,EasyPOI
会正确渲染。
📌 支持导出为 XSSF
(.xlsx
) 和 HSSF
(.xls
)
通过 ExportParams
的构造函数第三个参数设置:
new ExportParams("标题", "sheet名称", ExcelType.XSSF) // 支持 .xlsx
✅ 小贴士
- 如果你需要 嵌套表头,可将
ExcelExportEntity.setList()
设置为子列(递归结构)。 - 如果你想加样式、字体、宽度等,可继续设置
ExportParams
和ExcelExportEntity
的参数。
是否需要我为你封装一个通用的 MultiSheetExportUtil
工具类?你只需要传入 List<SheetData>
即可导出多个不同结构的 Sheet。