一、前期准备?
导入pom文件
<dependency> <groupId>com.deepoove</groupId> <artifactId>poi-tl</artifactId> <version>1.12.1</version> </dependency>
二 、导出 代码
看了很长时间的源码,没看懂,看了文档 介绍的技术,跟需求不符合,
导出表格 不能事先定义表格头部模版,就在表格中写
1.定义表格中 映射字段
2.代码实现
Map<String,Object> res = new HashMap<>();
//设置的合并规则
MergeCellRule.MergeCellRuleBuilder mergeCellRuleBuilder = MergeCellRule.builder();
//设置表头
RowRenderData header = Rows.of("姓名", "年龄", "身高").bgColor("F2F2F2").center()
.textColor("7F7f7F").textFontFamily("Hei").textFontSize(9).create();
List<Map<String,String>> lists = new ArrayList<>();
Map<String,String> map = new HashMap<>();
map.put("name", "小红");
map.put("age", "18");
map.put("height", "165");
lists.add(map);
lists.add(map);
lists.add(map);
lists.add(map);
lists.add(map);
lists.add(map);
lists.add(map);
lists.add(map);
lists.add(map);
lists.add(map);
//设置样式颜色尺寸等等
BorderStyle borderStyle = new BorderStyle();
borderStyle.setColor("A6A6A6");
borderStyle.setSize(4);
borderStyle.setType(XWPFTable.XWPFBorderType.SINGLE);
Tables.TableBuilder tableBuilder = Tables.ofA4MediumWidth();
tableBuilder.addRow(header);
//表体内容
for (Map<String, String> list : lists) {
RowRenderData row = Rows.of(map.get("name"),map.get("age"),map.get("height")).center().create();
tableBuilder.addRow(row);
}
TableRenderData tableRenderData = tableBuilder.border(borderStyle).create();
/**
* 设置表格合并规则
* 1.起始行 MergeCellRule.Grid.of(i, j) i: 行 j: 列
* 2.结束行 MergeCellRule.Grid.of(i, j) i: 行 j: 列
*/
mergeCellRuleBuilder.map(MergeCellRule.Grid.of(1, 0), MergeCellRule.Grid.of(3, 0));
mergeCellRuleBuilder.map(MergeCellRule.Grid.of(4, 0), MergeCellRule.Grid.of(5, 0));
mergeCellRuleBuilder.map(MergeCellRule.Grid.of(6, 0), MergeCellRule.Grid.of(9, 0));
/**
* MergeCellRule支持多合并规则,会以Map的形式存入可以看一下源码
* !!! 一定要设置完规则后再调用 MergeCellRule的build方法进行构建
*/
tableRenderData.setMergeRule(mergeCellRuleBuilder.build());
res.put("title", "测试测试");
res.put("date","2023-8-8");
res.put("renderData",tableRenderData);
XWPFTemplate template = XWPFTemplate.compile("C:\\Users\\admin\\Desktop\\施工日报.docx").render(res);
template.writeAndClose(Files.newOutputStream(Paths.get("C:\\Users\\admin\\Desktop\\施工日报1.docx")));
这里的地址 写的是本地测试地址 ,等实际应用时 可以存放到服务器
3. 导出结果