使用easypoi完成word模板内容替换

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


前言

使用 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模板。
二、循环替换失败。
注意fe: 与 List 间空格    List与参数间空格

### 如何使用 Easypoi 导出 Word 模板 #### 准备工作 为了能够顺利地通过 Easypoi 实现 Word 文档的导出功能,需确保项目中已引入必要的依赖项。对于 Maven 项目而言,在 `pom.xml` 文件内加入相应的依赖声明[^2]。 ```xml <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>4.5.0</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-web</artifactId> <version>4.5.0</version> </dependency> ``` #### 创建 Word 模板 创建一个 `.docx` 格式的文档作为模板文件,并利用占位符来标记待填充的数据位置。这些占位符遵循特定语法——即采用双大括号包裹变量名的方式呈现(例如:`{{name}}`),这允许后续程序依据实际数据替换相应部分的内容[^1]。 #### 编写 Java 代码实现导出逻辑 下面是一段简单的 Java 示例代码片段,展示了怎样加载预先准备好的模板并执行具体的导出流程: ```java import cn.afterturn.easypoi.word.WordExportUtil; import org.apache.poi.xwpf.usermodel.XWPFDocument; import java.io.File; import java.io.FileOutputStream; import java.util.HashMap; import java.util.Map; public class ExportWordExample { public static void main(String[] args) throws Exception { String templatePath = "path/to/your/template.docx"; File file = new File(templatePath); Map<String, Object> dataMap = new HashMap<>(); dataMap.put("name", "张三"); XWPFDocument doc = WordExportUtil.exportWord07(templatePath, dataMap); FileOutputStream fos = new FileOutputStream(new File("output_file_name.docx")); doc.write(fos); fos.close(); doc.close(); } } ``` 这段代码首先指定了模板路径以及输出的目标文件名称;接着构建了一个包含键值对映射关系的对象实例 (`dataMap`) 来存储要注入到模板中的具体数值;最后调用了来自 EasyPoi 库的方法完成整个过程的操作,包括读取原始模板、应用数据集更新内容区域直至最终保存修改后的副本至指定地点。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值