2.3 表格
表格一般使用{{#参数值}}表示,这些和前面基本是一样的
2.3.1 文本插入
如果你的某一行全是文本,可以使用
RowRenderData row1 = Rows.create("名称","类型");
如果需要空行,使用null代替;
RowRenderData row1 = Rows.create("名称",null,"类型",null);
这种在名称列、类型列后分别会插入一列空白数据;
2.3.2 图片插入
在官方文件中看到,rows -> cells ->paragraphs -> contents ,contents 就是我们插入的类型;
CellRenderData cell = new CellRenderData();
ParagraphRenderData graph1 = new ParagraphRenderData();
graph1.addPicture(new PictureRenderData(500,300,PictureType.JPEG,bufferedImage1));
cell.addParagraph(graph1);
如果这一行还想插入其他的内容,多创建几个cell,ParagraphRenderData,例如
CellRenderData cell2 = new CellRenderData();
CellRenderData cell3 = new CellRenderData();
ParagraphRenderData graph2 = new ParagraphRenderData();
ParagraphRenderData graph3 = new ParagraphRenderData();
graph2.addText("名称");
graph3.addText("数量");
cell2.addParagraph(graph2);
cell3.addParagraph(graph3);
最后统一添加的ROWS对象中。
RowRenderData row0 = Rows.create(cell,cell1,cell2);
2.3.3 单元格合并
创建合并规则
MergeCellRule rule = MergeCellRule.builder().map(Grid.of(0, 2),Grid.of(7, 2)).build();
上面是我的示例,将0行第2列到第7行第2列合并;
如果你的单元格有多次合并,比如你除了需要将0行第2列到第7行第2列合并外,还需要将第0行第1列到第4行第1列合并,那么
你可以继续添加map条件,比如:
MergeCellRule rule = MergeCellRule.builder().
map(Grid.of(0, 1),Grid.of(4, 1)).
map(Grid.of(0, 2),Grid.of(7, 2)).build();
如果你需要多行多列合并,比如第1行3-7列和第3行的3-7列合并,你应该这样写:
MergeCellRule rule = MergeCellRule.builder().map(Grid.of(1, 3),Grid.of(3, 7)).build();
map里面类似于你的坐标,从你的起点到终点就行。
最后放到数组里,key值需要和你模板的参数值对应
dataMap.put("alarm_data",Tables.of(row0,row1,row2).mergeRule(rule).create());
2.3.4 自定义列宽
tableStyle是表格整体宽度,14.63f是A4纸标准宽度,colWidths就是每列的列宽。默认是平均分配。
在Tables.java的源码中有这样两个函数,一个是根据double类型,一个是String类型
double就是根据你纸张的具体宽度设计;String按照比例,我这里是调用String类型的函数
int[] width = {10,20,70};
dataMap.put("alarm_data",Tables.of(row0,row1,row2,row3).percentWidth("100%",width).mergeRule(rule).create());
你有几列,数组的大小就是多少。String传参固定为"100%",我这个例子是三列,比例是1:2:7
另外数组的值相加必须100,否则会报异常
三、生成文件
XWPFTemplate render = template.render(dataMap);
try {
render.writeAndClose(new FileOutputStream("文件名.docx"));
} catch (IOException e) {
e.printStackTrace();
}
到这里生成文件的功能就完成了,有兴趣的小伙伴可以留言一起交流交流