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();
}
到這里生成文件的功能就完成了,有興趣的小伙伴可以留言一起交流交流