poi-tl 官网
http://deepoove.com/poi-tl/
maven
1.最新版
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.10.0-beta</version>
</dependency>
2.旧版
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.9.1</version>
</dependency>
3.更多版本可以去管网上去查看,本篇文章用的是旧版。
模板制作
1.目前只适用于docx的文件,这一点要注意。
2.想看更多模板的可以去码云上下载源代码。
3.本篇文章的模板
本模板是进行批量循环行进行导出的,批量输出表格的内容用[] ,单独数据用{{}} 。
实体类的创建
1.创建同模板数据一样的实体数据
package cn.seisys.its.ls.bo;
import java.util.List;
//设置对象集合和单独数据的类
public class PaymentHackData {
/**
特别注意是实体对象要和你模板的里面的数据名字一直
比如模板写{{test1}} 那么你对应的java属性也要写test1
[test2] 对应的也要写成 test2
*/
//模板的单独项 单独项 模板用{{}}
private String tbr;
private String tbrq;
//表格里面的对象内容集合 多数据项 模板用 []
private List<Vehicle> bos;
private List<LsBaWord> bas;
private String baTime;
private String reason;
private String agent;
private String writeTime;
private List<LsLicensePhone> phones;
public List<LsLicensePhone> getPhones() {
return phones;
}
public void setPhones(List<LsLicensePhone> phones) {
this.phones = phones;
}
public String getAgent() {
return agent;
}
public void setAgent(String agent) {
this.agent = agent;
}
public String getWriteTime() {
return writeTime;
}
public void setWriteTime(String writeTime) {
this.writeTime = writeTime;
}
public String getReason() {
return reason;
}
public void setReason(String reason) {
this.reason = reason;
}
public String getBaTime() {
return baTime;
}
public void setBaTime(String baTime) {
this.baTime = baTime;
}
public List<LsBaWord> getBas() {
return bas;
}
public void setBas(List<LsBaWord> bas) {
this.bas = bas;
}
public String getTbr() {
return tbr;
}
public void setTbr(String tbr) {
this.tbr = tbr;
}
public String getTbrq() {
return tbrq;
}
public void setTbrq(String tbrq) {
this.tbrq = tbrq;
}
public List<Vehicle> getBos() {
return bos;
}
public void setBos(List<Vehicle> bos) {
this.bos = bos;
}
}
package cn.seisys.its.ls.bo;
//表格内要输出多行的类
public class LsBaWord {
//模板的值和属性要相同
private String xh;
private String tfdd;
private String cxdLen;
private String rxdLen;
private String cxdNum;
private String rxdNum;
private String dlqk;
private String tfTime;
private String tcfs;
private String ryNum;
public String getXh() {
return xh;
}
public void setXh(String xh) {
this.xh = xh;
}
public String getTfdd() {
return tfdd;
}
public void setTfdd(String tfdd) {
this.tfdd = tfdd;
}
public String getCxdLen() {
return cxdLen;
}
public void setCxdLen(String cxdLen) {
this.cxdLen = cxdLen;
}
public String getRxdLen() {
return rxdLen;
}
public void setRxdLen(String rxdLen) {
this.rxdLen = rxdLen;
}
public String getCxdNum() {
return cxdNum;
}
public void setCxdNum(String cxdNum) {
this.cxdNum = cxdNum;
}
public String getRxdNum() {
return rxdNum;
}
public void setRxdNum(String rxdNum) {
this.rxdNum = rxdNum;
}
public String getDlqk() {
return dlqk;
}
public void setDlqk(String dlqk) {
this.dlqk = dlqk;
}
public String getTfTime() {
return tfTime;
}
public void setTfTime(String tfTime) {
this.tfTime = tfTime;
}
public String getTcfs() {
return tcfs;
}
public void setTcfs(String tcfs) {
this.tcfs = tcfs;
}
public String getRyNum() {
return ryNum;
}
public void setRyNum(String ryNum) {
this.ryNum = ryNum;
}
}
逻辑代码的编写
@PostMapping("/wordExport")
public void wordExport(HttpServletResponse response )throws Exception{
//获取你的模板地址
Resource resource = resourceLoader.getResource("classpath:/word/xxx.docx");
//创建对象
PaymentHackData data = new PaymentHackData();
//创建输出多行的集合
List<LsBaWord> bas = new ArrayList<>();
//查出来的集合
List<xxx> xx1= xxxx.xxxxServiec();
xxx1.forEach(a->{
//创建对象
LsBaWord ba = new LsBaWord();
//给对象赋值
ba.setxxx(a.xxxx);
//将对象添加到集合
bas.add(ba);
);
data.setxxx(“这里面填写你要插入的值”);
//你要多个输出行的集合数据
data.setxxx(bas);
//赋值单独项
data.setxxx("小二上酒");
InputStream is = resource.getInputStream();
HackLoopTableRenderPolicy hackLoopTableRenderPolicy = new HackLoopTableRenderPolicy();
//注意这个地方写的是你模板上表格内的文字和你写的List集合的名字{{}}
Configure config = Configure.builder().bind("bas", hackLoopTableRenderPolicy).build();
XWPFTemplate template = XWPFTemplate.compile(is, config).render(data);
// 设置强制下载不打开
response.setContentType("application/force-download");
// 设置文件名
response.addHeader("Content-Disposition", "attachment;fileName=" + "adsda"+".docx");
OutputStream out = response.getOutputStream();
template.write(out);
out.flush();
out.close();
is.close();
template.close();
}
注意事项
1.注意模板的制作,导出不成功,很大一部分是模板制作不规范。
2.注意表格内数据的书写和实体类对应。
3.单独项用 {{}} 表示,循环行数据用 [ ] 表示。
4.同样适用于普通的word表格导出,只需要模板使用{{}}即可。