导出EXCEL中的序号合并单元格
最后更新:2024-07-09 18:59:00
|
状态:未完成
在导出excel时有可能不是每行一个序号,而是每组一个序号,如按部门分组,每个部门一个序号
1 | 人事部 | 张三 | 20 |
张三三 | 22 | ||
2 | 财务部 | 李四 | 25 |
王五 | 26 | ||
王五五 |
20 |
TableBuilder builder = TableBuilder.init() .setDatas(set) //设置数据源 .setFields("{num}(DEPARTMENT_NAME)" ,"DEPARTMENT_NAME" ,"USER_NAME" ,"USER_AGE") //设置需要导出的属性(列) .addUnion("DEPARTMENT_NAME"); //设置需要合并行的列,如果年相同的合并,月相同的合并(前提是年相同) File file = new File("模板地址"); ExcelUtil.export(file, "sheet名称", 2, builder.build()); //从第2行插入(根据表头行数)
参考【示例源码】
DataSet set = service.querys("V_HR_SALARY","YYYY:"+ (DateUtil.year()-1), "ORDER BY EMPLOYEE_ID, YM"); String footer = "<tr><td colspan='4' style='text-align:right;'>合计:</td><td>123</td></tr>"; TableBuilder builder = TableBuilder.init() .setDatas(set) //设置数据源 .setFields( //需要导出的列 "${num}(EMPLOYEE_NM)" //{num}表示序号,(DEPARTMENT_NM)表示根据哪一列计算序号,这里部门名称需要分组合并,所以num不是按行计算 ,"DEPARTMENT_NM" ,"${DEPARTMENT_ID}-${DEPARTMENT_NM}" ,"EMPLOYEE_NM" ,"YM" ,"BASE_PRICE" ,"DATA_STATUS" ) .addUnions( //需要合并的列 "DEPARTMENT_NM" ,"EMPLOYEE_NM(DEPARTMENT_NM)" //如果部门名称相同则合并()中参考的列必须从setFields参数中选一个或多个如({DEPARTMENT_ID}-{DEPARTMENT_NM}),如果多个用,分隔如({DEPARTMENT_ID}-{DEPARTMENT_NM},YM) ,"YM(DEPARTMENT_NM)" //如果月份相同则合并,前提是部门已经合并 ) .setReplaceEmpty("/") //如果值为空则以/代替 .addIgnoreUnionValue("/") //不参与合并的值 .setCellBorder(true) //设置默认边框 .setMergeCellHorizontalAlign("center") //设置合并的列 水平对齐方式 .setMergeCellVerticalAlign("top") //设置合并的列 垂直对齐方式 .setEmptyCellHorizontalAlign("center") //设置空单元格 水平对齐方式(为空时有可能需要替换成其他值) .setEmptyCellVerticalAlign("top") //设置空单元格 垂直对齐方式 .setHorizontalAlign("YM","center") //设置月份列 水平对齐方式 .setVerticalAlign("middle") //设置所有数据单元格 垂直对齐方式 .setLineHeight("50px") //设置数据区域行高 .setWidth("YM","200px") //设置月份列 宽度 .setFooter(footer) .addOptions("DATA_STATUS","1","正常","0","异常") ; Map<String,String> options = new HashMap<>(); options.put("1","正常"); options.put("0","异常"); builder.setOptions("DATA_STATUS", options); //一般从数据库中查 DataSet setOptions = new DataSet(); DataRow setOption = new DataRow(); setOption.put("ID","1"); setOption.put("NAME","正常"); builder.setOptions("DATA_STATUS", setOptions, "ID","NAME"); table = builder.build(); File file = new File(dir, "result/export_table.xlsx"); ExcelUtil.export(file, table);