前言
使用 easypoi 内容替换 word模板,依赖 代码 及模板制作。一、模板

{{字段名(要与代码中相同) }} ------ eg: {{time}}
如循环则是 {{fe: List名 t.字段}} ----- List 默认是 t,注意空格
下面直接上代码,自己多测试。
二、代码
1.依赖
网上还有 easypoi-web的,简单使用不需要。easypoi-base就行。
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jcommon</artifactId>
<version>1.0.24</version>
</dependency>
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.5.0</version>
</dependency>
2.java
代码如下(示例):
/**
* 模板打印
* @param templatePath 模板存放路径
* @param temDir 打印文件生成路径
* @param fileName 打印文件名
* @param params 模板生成文件的参数
* @return
*/
public Map wordPrintWord(String templatePath, String temDir, String fileName, Map<String,Object> params){
logger.info(" --- 进入 wordPrintWord 模板打印方法 --- ");
Assert.notNull(templatePath, "模板路径不能为空");
Assert.notNull(temDir, "临时文件路径不能为空");
Assert.notNull(fileName, "导出文件名不能为空");
Assert.isTrue(fileName.endsWith(".docx"), "word导出请使用docx格式");
// 检查路径结尾
// File.separator 相当于 '/' '\\' 适用于windows、linux是系统默认的
if (!temDir.endsWith("/")) {
temDir = temDir + File.separator;
}
// 检查目录是否存在
File dir = new File(temDir);
if (!dir.exists()) {
dir.mkdirs();
}
// 检查模板文件是否存在
File template = new File(templatePath);
if (!template.exists()) {
wordMap.put("wordBoolean", false);
return wordMap;
}
String filenameWord = temDir + "/" + fileName;
// 删除重复 WORD
File wordFile = new File(filenameWord);
if (wordFile.exists()) {
wordFile.delete();
}
try {
XWPFDocument doc = WordExportUtil.exportWord07(templatePath, params);
FileOutputStream fos = new FileOutputStream(filenameWord);
doc.write(fos);
fos.flush();
fos.close();
} catch (Exception e) {
// -----------
}
}
params 是替换参数
代码如下:
String wordFile = "C:/aaaaa/bbbb/cccc/模板.docx";
String pdfFilePath = "E:/aaaaa/bbbbbb/ccccc";
String wordF = "生成的文件名.docx";
Map params = new HashMap<>();
params.put("参数1", "替换的内容1");
params.put("参数2", "替换的内容2");
params.put("参数3", "替换的内容3");
List<Map> list = new ArrayList<Map>();
Map map1 = new HashMap<>();
Map map2 = new HashMap<>();
Map map3 = new HashMap<>();
Map map4 = new HashMap<>();
// 第一行
map1.put("循环替换参数1", "循环替换的内容1");
map1.put("循环替换参数2", "循环替换的内容2");
map1.put("循环替换参数3", "循环替换的内容3");
map1.put("循环替换参数4", "循环替换的内容4");
map1.put("循环替换参数5", "循环替换的内容5");
// 第二行
map2.put("循环替换参数1", "循环替换的内容1");
map2.put("循环替换参数2", "循环替换的内容2");
map2.put("循环替换参数3", "循环替换的内容3");
map2.put("循环替换参数4", "循环替换的内容4");
map2.put("循环替换参数5", "循环替换的内容5");
// 第三行
map3.put("循环替换参数1", "循环替换的内容1");
map3.put("循环替换参数2", "循环替换的内容2");
map3.put("循环替换参数3", "循环替换的内容3");
map3.put("循环替换参数4", "循环替换的内容4");
map3.put("循环替换参数5", "循环替换的内容5");
// 第四行
map4.put("循环替换参数1", "循环替换的内容1");
map4.put("循环替换参数2", "循环替换的内容2");
map4.put("循环替换参数3", "循环替换的内容3");
map4.put("循环替换参数4", "循环替换的内容4");
map4.put("循环替换参数5", "循环替换的内容5");
list.add(map1);
list.add(map2);
list.add(map3);
list.add(map4);
params.put("pList", list);
// 调用方法
wordPrintWord(wordFile, pdfFilePath, wordF, params);
注意的坑
一 、如果报数组越界异常,不要慌,很可能是参数与模板不对应,仔细查看 java代码与word模板。
二、循环替换失败。


本文介绍了如何使用easypoi库在Java中进行Word模板内容替换。主要内容包括设置模板字段,如{{字段名}},以及循环替换{{fe: List名 t.字段}}。代码示例中展示了依赖引入和替换参数的方法。注意,可能出现的错误包括参数与模板不对应导致的数组越界异常及循环替换失败问题。
2679

被折叠的 条评论
为什么被折叠?



