该文档方法不全面,请看另一篇 https://blog.csdn.net/weixin_43171019/article/details/104793714
需求描述:按照给定的word模板生成word文档,模板包含页眉 页脚 文档标题 表格数据
生成后的word效果如下图:
大概要做的效果就如上面的样子了,下面开始做吧。
一.使用apache的poi,在pom中加入maven依赖如下:
org.apache.poi
poi-ooxml
3.14
org.apache.poi
poi-excelant
3.14
org.apache.poi
poi-examples
3.14
org.apache.xmlbeans
xmlbeans
2.6.0
二.maven引入成功后 开始处理模板,模板处理如下:
1.其中companyName就是上面效果图中 “测试替换文本的的公司名”在模板中的埋点,folderName同理;
2.对于效果图中页眉的的部分 在代码中动态生成,无需埋点
3.表格中序号 名称 资料形成时间 监理意见 备注 对应每一行进行埋点,在方法处理中根据表格的数据长度动态生成每一行
三.模板处理好以后,下面是主要的工具类代码,基本都加了注释
package cn.demo.util.wordUtil;
import com.auth0.jwt.internal.org.apache.commons.lang3.StringUtils;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
import java.io.*;
import java.math.BigInteger;
import java.util.*;
public class WordReporter {
private String tempLocalPath;
private XWPFDocument xwpfDocument = null;
private FileInputStream inputStream = null;
private OutputStream outputStream = null;
public WordReporter(){
}
public WordReporter(String tempLocalPath){
this.tempLocalPath = tempLocalPath;
}
/**
* 设置模板路径
* @param tempLocalPath
*/
public void setTempLocalPath(String tempLocalPath) {
this.tempLocalPath = tempLocalPath;
}
/**
* 初始化
* @throws IOException
*/
public void init() throws IOException{
inputStream = new FileInputStream(new File(this.tempLocalPath));
xwpfDocument = new XWPFDocument(inputStream);
}
/**
* 导出方法
* @param params 表格里的数据列表
* @param orgFullName 需要替换的页眉的公司的名称
* @param logoFilePath 需要替换的页眉的Logo的图片的地址
* @param tableIndex 需替换的第几个表格的下标
* @param textMap 需替换的文本的数据入参
* @return
* @throws Exception
*/
public boolean export(List
四.测试类代码
public static void main(String[] args) throws Exception {
// 添加假数据 这里你也可以从数据库里获取数据
List> list = new ArrayList<>();
for (int i =0;i < 10; i++){
Map map = new HashMap<>();
map.put("index", "2018"+i);
map.put("fileName", "我是第一列数据"+i);
map.put("creationDate", new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date()));
map.put("supervisionOpinions", "监理意见"+i);
map.put("comment", "我是备注"+i);
list.add(map);
}
Map textMap=new HashMap<>();
textMap.put("companyName", "测试替换文本的的公司名");
textMap.put("folderName", "测试替换文本里的第二个埋点");
// 模板文件输入输出地址
String filePath = "c:/template/测试模板.docx";
String outPath = "c:/template/生成的示例文档0629.docx";
String orgFullName="测试替换页眉的公司名";
String imgFile="C:/marvel/jam.jpg";
WordReporter wordReporter = new WordReporter();
wordReporter.setTempLocalPath(filePath); //设置模板的路径
wordReporter.init(); //初始化工具类
wordReporter.export(list,orgFullName,imgFile,0,textMap); //写入相关数据
wordReporter.generate(outPath); //导出到目标文档
}```