(1)需要渲染的表格的模板
说明:
{{goods}}
?是个标准的标签,将?{{goods}}
?置于循环行的上一行,循环行设置要循环的标签和内容,注意此时的标签应该使用?[]
?,以此来区别poi-tl的默认标签语法。同理,{{labors}}
?也置于循环行的上一行。?
?
(2)定义两个实体类?
@Data
public class Goods {
private int count;
private String name;
private String desc;
private int discount;
private int tax;
}
@Data
public class Labors {
private String category;
private int people;
private int price;
}
(3)测试代码
@Test
public void autoGenerateTable1() throws Exception {
// 数据
Goods goods1 = new Goods();
Goods goods2 = new Goods();
Labors labors1 = new Labors();
Labors labors2 = new Labors();
goods1.setCount(2);
goods1.setName("商品1");
goods1.setDiscount(10);
goods1.setDesc("商品1描述");
goods1.setTax(5);
goods2.setCount(4);
goods2.setName("商品2");
goods2.setDiscount(20);
goods2.setDesc("商品2描述");
goods2.setTax(10);
List<Goods> goodsList = Arrays.asList(goods1, goods2);
labors1.setPeople(3);
labors1.setCategory("类别1");
labors1.setPrice(100);
labors2.setPeople(1);
labors2.setCategory("类别2");
labors2.setPrice(200);
List<Labors> laborList = Arrays.asList(labors1, labors2);
// 用行循环插件
LoopRowTableRenderPolicy renderPolicy = new LoopRowTableRenderPolicy();
ConfigureBuilder builder = Configure.builder();
Configure configure = builder.bind("goods", renderPolicy).bind("labors", renderPolicy).build();
XWPFTemplate template = XWPFTemplate.compile("D:\\Idea-projects\\POI_word\\templates_autoGenerateTable.docx",configure);
Map<String, Object> map = new HashMap<>();
map.put("goods", goodsList);
map.put("labors", laborList);
template.render(map);
FileOutputStream fileOutputStream = new FileOutputStream("D:\\Idea-projects\\POI_word\\output_autoGenerateTable.docx");
template.writeAndClose(fileOutputStream);
template.close();
}
(4)渲染结果?
?
(5)测试代码详细解释
列循环跟行循环没有什么区别,就是将行循环插件换成了列循环插件
(1) 模板
(2)测试代码
@Test
public void autoGenerateTable2() throws Exception {
// 数据
Labors labors1 = new Labors();
Labors labors2 = new Labors();
labors1.setPeople(3);
labors1.setCategory("类别1");
labors1.setPrice(100);
labors2.setPeople(1);
labors2.setCategory("类别2");
labors2.setPrice(200);
List<Labors> laborList = Arrays.asList(labors1, labors2);
// 用列循环插件
LoopColumnTableRenderPolicy renderPolicy = new LoopColumnTableRenderPolicy();
ConfigureBuilder builder = Configure.builder();
Configure configure = builder.bind("labors", renderPolicy).build();
XWPFTemplate template = XWPFTemplate.compile("D:\\Idea-projects\\POI_word\\templates_autoGenerateTableCol.docx",configure);
Map<String, Object> map = new HashMap<>();
map.put("labors", laborList);
template.render(map);
FileOutputStream fileOutputStream = new FileOutputStream("D:\\Idea-projects\\POI_word\\output_autoGenerateTableCol.docx");
template.writeAndClose(fileOutputStream);
template.close();
}
(3)渲染结果
?