导出EXCEL中的序号合并单元格
最后更新:2025-07-24 11:08:52
|
状态:未完成
在导出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);