package word;

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBookmark;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Word {
    public static void main(String[] args) {
        try {
            // 读取输入文件
            XWPFDocument input01Doc = new XWPFDocument(new FileInputStream('input01.docx'));
            XWPFDocument input02Doc = new XWPFDocument(new FileInputStream('input02.docx'));
            XWPFDocument input03Doc = new XWPFDocument(new FileInputStream('input03.docx'));

            // 获取输入文件的书签内容
            String bookmark01Content = getBookmarkContent(input01Doc, '应变计');
            String bookmark02Content = getBookmarkContent(input02Doc, '位移计');

            // 替换输入文件的书签内容
            replaceBookmarkContent(input03Doc, '应变计', bookmark01Content);
            replaceBookmarkContent(input03Doc, '位移计', bookmark02Content);

            // 保存新文件
            FileOutputStream outputDoc = new FileOutputStream('input04.docx');
            input03Doc.write(outputDoc);
            outputDoc.close();

            System.out.println('替换完成!');
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static String getBookmarkContent(XWPFDocument doc, String bookmarkName) {
        for (XWPFParagraph paragraph : doc.getParagraphs()) {
            for (XWPFRun run : paragraph.getRuns()) {
                if (run != null) {
                    CTRun ctRun = run.getCTR();
                    for (CTBookmark bookmark : ctRun.getBookmarkStartArray()) {
                        if (bookmark.getName().equals(bookmarkName)) {
                            return ctRun.getText(0);
                        }
                    }
                }
            }
        }
        return null;
    }

    private static void replaceBookmarkContent(XWPFDocument doc, String bookmarkName, String content) {
        for (XWPFParagraph paragraph : doc.getParagraphs()) {
            for (XWPFRun run : paragraph.getRuns()) {
                if (run != null) {
                    CTRun ctRun = run.getCTR();
                    for (CTBookmark bookmark : ctRun.getBookmarkStartArray()) {
                        if (bookmark.getName().equals(bookmarkName)) {
                            ctRun.setText(content, 0);
                        }
                    }
                }
            }
        }
    }
}

代码说明:

  • 这段Java代码使用了Apache POI库来操作Word文档(.docx)。
  • getBookmarkContent 方法用于获取指定书签的内容。
  • replaceBookmarkContent 方法用于替换指定书签的内容。
  • 主函数中演示了如何读取三个Word文档,获取其中两个文档中指定书签的内容,并将内容替换到第三个文档中,最后保存新的Word文档。

使用Apache POI库需要添加以下依赖:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>
使用Apache POI操作Word书签:读取、替换和保存

原文地址: https://www.cveoy.top/t/topic/fMbX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录