导出EXCEL中的序号合并单元格

最后更新:2024-07-09 18:59:00 | 状态:未完成

在导出excel时有可能不是每行一个序号,而是每组一个序号,如按部门分组,每个部门一个序号

1 人事部 张三 20
张三三 22
2 财务部 李四 25
王五 26

王五五

20
这时num需要部门列来合并单元格

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);

首页 最近更新 搜索 提交 回复