poi操作word替换模板

模板:
在这里插入图片描述

package com.ludan.test;

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author yinna
 * @version 1.0
 * @date 2022/8/2 10:43
 */
public class WordUtil {


    /**
     * 替换段落文本
     *
     * @param document docx解析对象
     * @param textMap  需要替换的信息集合
     */
    public static void changeText(XWPFDocument document, Map<String, String> textMap) {
        //获取段落集合
        List<XWPFParagraph> paragraphs = document.getParagraphs();
        for (XWPFParagraph paragraph : paragraphs) {
            //获取到段落中的所有文本内容
            String text = paragraph.getText();
            //判断此段落中是否有需要进行替换的文本
            if (checkText(text)) {
                List<XWPFRun> runs = paragraph.getRuns();
                for (XWPFRun run : runs) {
                    //替换模板原来位置
                    run.setText(changeValue(run.toString(), textMap), 0);
                }
            }
        }
    }

    /**
     * 判断文本中是否包含$
     *
     * @param text 文本
     * @return 包含返回true, 不包含返回false
     */
    public static boolean checkText(String text) {
        boolean check = false;
        if (text.indexOf("$") != -1) {
            check = true;
        }
        return check;
    }

    /**
     * 匹配传入信息集合与模板
     *
     * @param value   模板需要替换的区域
     * @param textMap 传入信息集合
     * @return 模板需要替换区域信息集合对应值
     */
    public static String changeValue(String value, Map<String, String> textMap) {
        Set<Map.Entry<String, String>> textSets = textMap.entrySet();
        for (Map.Entry<String, String> textSet : textSets) {
            //匹配模板与替换值 格式${key}
            String key = "${" + textSet.getKey() + "}";
            if (value.indexOf(key) != -1) {
                value = textSet.getValue();
            }
        }
        //模板未匹配到区域替换为空
        if (checkText(value)) {
            value = "";
        }
        return value;
    }

}

调用工具类

Map<String,Object> map = new HashMap();
map.put("name","测试");
map.put("content","测试");
WordUtils.changeTest(new XWPFDocument(new ClassPathResource("classpath:template/1.docx").getStream()),map)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用 Apache POI 操作 Word 模板替换内容,你可以使用以下步骤: 1. 首先,你需要创建一个空白 Word 文档,并将其保存为模板文件(.dotx 或 .dotm)。 2. 使用 Apache POI 创建 Word 文档对象,使用模板文件作为输入。 ```java // 创建 Word 文档对象 XWPFDocument document = new XWPFDocument(new FileInputStream("template.dotx")); ``` 3. 获取文档中的所有段落和表格,并遍历它们以查找要替换的文本。 ```java // 获取文档中的所有段落和表格 List<IBodyElement> elements = document.getBodyElements(); for (IBodyElement element : elements) { if (element instanceof XWPFParagraph) { // 处理段落 XWPFParagraph paragraph = (XWPFParagraph) element; List<XWPFRun> runs = paragraph.getRuns(); for (XWPFRun run : runs) { String text = run.getText(0); if (text != null && text.contains("要替换的文本")) { // 替换文本 text = text.replace("要替换的文本", "替换后的文本"); run.setText(text, 0); } } } else if (element instanceof XWPFTable) { // 处理表格 XWPFTable table = (XWPFTable) element; List<XWPFTableRow> rows = table.getRows(); for (XWPFTableRow row : rows) { List<XWPFTableCell> cells = row.getTableCells(); for (XWPFTableCell cell : cells) { List<XWPFParagraph> paragraphs = cell.getParagraphs(); for (XWPFParagraph paragraph : paragraphs) { List<XWPFRun> runs = paragraph.getRuns(); for (XWPFRun run : runs) { String text = run.getText(0); if (text != null && text.contains("要替换的文本")) { // 替换文本 text = text.replace("要替换的文本", "替换后的文本"); run.setText(text, 0); } } } } } } } ``` 4. 使用 Apache POI 将修改后的 Word 文档保存到文件中。 ```java // 保存 Word 文档 FileOutputStream out = new FileOutputStream("output.docx"); document.write(out); out.close(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值