java操作word循环动态添加表格Table使用poi-tl的LoopRowTableRenderPolicy
通过这个简单的例子,再去和自己的业务结合
官网http://deepoove.com/poi-tl/
官网有其它完整的例子:http://deepoove.com/poi-tl/#hack-loop-table
1.导包
( 注意:poi-tl低版本没有LoopRowTableRenderPolicy ,下面是目前最新版)
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.12.0</version>
</dependency>
<!-- JSON类需要这个依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>
2.需要动态添加的模板
3.使用
3.1 需要循环添加内容的实体类
package org.app.test;
public class TestLoopRowTable {
private String xh;
private String nr;
public TestLoopRowTable(String xh, String nr) {
this.xh = xh;
this.nr = nr;
}
public TestLoopRowTable() {
}
@Override
public String toString() {
return "TestLoopRowTable{"
"xh='" xh '\''
", nr='" nr '\''
'}';
}
public String getXh() {
return xh;
}
public void setXh(String xh) {
this.xh = xh;
}
public String getNr() {
return nr;
}
public void setNr(String nr) {
this.nr = nr;
}
}
3.2 获取数据和模板进行填充
import com.alibaba.fastjson.JSON;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
public class TestTable {
@org.junit.jupiter.api.Test
public void testTable() throws IOException {
// compile 编译模板
// render 渲染数据
// write 输出到流
// TDO模式:Template data-model = output
// 模板文件地址
String filePath= "D:\\codes\\08\\miaosha\\src\\main\\resources\\static\\tableTest.docx";
// 读取模板后保存生成word的地址
String outPath = "D:\\codes\\08\\miaosha\\src\\main\\resources\\static\\tableTestOut.docx";
// 为表格的显示绑定行循环
LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
// 将bz设置为行循环绑定的数据源的key,即key是bz的value会在模板中的{{bz}}处进行解析
Configure configure = Configure.builder().bind("bz", policy).build();
// 将需要解析的数据放到map中
HashMap<String, Object> map = new HashMap<String, Object>() {
{
// 其他业务获取到数据源
String testTable = "[{\"xh\":\"1\",\"nr\":\"内容1\"},{\"xh\":\"2\",\"nr\":\"内容2\"},{\"xh\":\"3\",\"nr\":\"内容3\"}]";
// 内容在表格里循环
// JSON使用,需要导入fastjson依赖
List<TestLoopRowTable> forms = JSON.parseArray(testTable, TestLoopRowTable.class);
for (int i = 0; i < forms.size(); i ) {
put("xh" i, forms.get(i).getXh());
put("nr" i, forms.get(i).getNr());
}
put("bz", forms);
}
};
// 读取模板、数据并渲染
XWPFTemplate template = XWPFTemplate.compile(filePath, configure).render(map);
// 文件是否已存在,则删除
File file = new File(outPath);
if (file.exists()){
file.delete();
}
// 生成word保存在指定目录
template.writeToFile(outPath);
template.close();
}
}
输出结果:
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgcbfik
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01