news 2026/4/19 17:39:27

Word文档操作神器:POI功能全解析 ——POI Word 文本、图片、表格、图表、文本框操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Word文档操作神器:POI功能全解析 ——POI Word 文本、图片、表格、图表、文本框操作

功能:
文本、图表、文本框内容替换、表格动态增加内容、单元格合并
增加图表、替换图表内容
你能用到的word的功能这儿都有!
话不多说,直接上代码!
pom 引用:

// https://mvnrepository.com/artifact/org.apache.poi/poi
    implementation 'org.apache.poi:poi:5.2.2'
// https://mvnrepository.com/artifact/com.deepoove/poi-tl
    implementation 'com.deepoove:poi-tl:1.12.2'
// https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-full
    implementation 'org.apache.poi:poi-ooxml-full:5.2.3'
// https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml
    implementation 'org.apache.poi:poi-ooxml:5.2.2'
全量代码粘贴即用:
`
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.data.ChartMultiSeriesRenderData;
import com.deepoove.poi.data.Charts;
import com.deepoove.poi.util.TableTools;
import com.documents4j.api.DocumentType;
import com.documents4j.api.IConverter;
import com.documents4j.job.LocalConverter;
import com.zzys.qhyscredit.utils.DateUtil;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.CellReference;
import org.apache.poi.util.Units;
import org.apache.poi.xddf.usermodel.chart.*;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.usermodel.*;
import org.apache.xmlbeans.XmlCursor;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlObject;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;

import java.io.*;
import java.nio.file.Files;
import java.util.*;

/**
 * @Author:Internet_worm
 * @Date:2024/7/26:09:59
 * @Description: word 操作工具类
 */
public class WordUtils {


    /***
     * @Description :替换段落文本
     * @param document docx解析对象
     * @param textMap  需要替换的信息集合
     * @return void
     */
    public static void changeText(XWPFDocument document, Map<String, String> textMap) {
        // 获取段落集合
        Iterator<XWPFParagraph> iterator = document.getParagraphsIterator();
        XWPFParagraph paragraph = null;
        while (iterator.hasNext()) {
            paragraph = iterator.next();
            // 判断此段落是否需要替换
            if (checkText(paragraph.getText())) {
                replaceValue(paragraph, textMap);
            }
        }
    }

    /***
     * @Description :检查文本中是否包含指定的字符
     * @param text
     * @return boolean
     */
    public static boolean checkText(String text) {
//        System.out.println("paragraph text :"+text);
        boolean check = false;
        if (text.contains("$")) {
            check = true;
        }
        return check;
    }

    /**
     * 替换图片
     *
     * @param document
     * @param picData
     * @throws Exception
     */

    public static void changePic(XWPFDocument document, Map<String, String> picData) throws Exception {
        // 获取段落集合
        Iterator<XWPFParagraph> iterator = document.getParagraphsIterator();
        XWPFParagraph paragraph;
        while (iterator.hasNext()) {
            paragraph = iterator.next();
            // 判断此段落是否需要替换
            String text = paragraph.getText();
            if (checkText(text)) {
                replacePicValue(paragraph, picData);
            }
        }
    }

    /***
     * @Description :替换表格内的文字
     * @param document
     * @param data
     * @return void
     */
    public static void changeTableText(XWPFDocument document, Map<String, String> data) {
        // 获取文件的表格
        Iterator<XWPFTable> tableList = document.getTablesIterator();
        XWPFTable table;
        List<XWPFTableRow> rows;
        List<XWPFTableCell> cells;
        // 循环所有需要进行替换的文本,进行替换
        while (tableList.hasNext()) {
            table = tableList.next();
            if (checkText(table.getText())) {
                rows = table.getRows();
                // 遍历表格,并替换模板
                for (XWPFTableRow row : rows) {
                    cells = row.getTableCells();
                    for (XWPFTableCell cell : cells) {
                        // 判断单元格是否需要替换
                        if (checkText(cell.getText())) {
                            List<XWPFParagraph> paragraphs = cell.getParagraphs();
                            for (XWPFParagraph paragraph : paragraphs) {
                                replaceValue(paragraph, data);
                            }
                        }
                    }
                }
            }
        }
    }

    /***
     * @Description :替换表格内图片
     * @param document
     * @param picData
     * @return void
     * @Date 2022/11/18 11:29
     */
    public static void changeTablePic(XWPFDocument document, Map<String, String> picData) throws Exception {
        // 获取文件的表格
        Iterator<XWPFTable> tableList = document.getTablesIterator();
        XWPFTable table;
        List<XWPFTableRow> rows;
        List<XWPFTableCell> cells;
        // 循环所有需要进行替换的文本,进行替换
        while (tableList.hasNext()) {
            table = tableList.next();
            if (checkText(table.getText())) {
                rows = table.getRows();
                // 遍历表格,并替换模板
                for (XWPFTableRow row : rows) {
                    cells = row.getTableCells();
                    for (XWPFTableCell cell : cells) {
                        // 判断单元格是否需要替换
                        if (checkText(cell.getText())) {
                      &

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 0:22:35

5分钟掌握Easy-Topo:轻松创建专业级网络拓扑图

5分钟掌握Easy-Topo&#xff1a;轻松创建专业级网络拓扑图 【免费下载链接】easy-topo vuesvgelement-ui 快捷画出网络拓扑图 项目地址: https://gitcode.com/gh_mirrors/ea/easy-topo Easy-Topo是一个基于VueSVGElement-UI的轻量级网络拓扑图编辑器&#xff0c;让开发者…

作者头像 李华
网站建设 2026/4/19 2:45:52

(8):实现双删(MySQL+Redis)

目录&#x1f334;一、实现“双路”删除&#x1f334;二、关键代码1. UserContext 工具类2. 删除逻辑&#xff1a;手动编排 RedisSearch 实现“知识同步销毁”&#x1f334;三、踩坑记录坑1&#xff1a;在这里插入代码片1&#xff1a;Redis 插件缺失坑2&#xff1a;索引配置缺失…

作者头像 李华