使用 Java Apache POI 将 Word 文档内容复制到书签位置

本指南介绍如何使用 Java Apache POI 库将一个 Word 文档的内容复制到另一个 Word 文档的书签位置。

代码示例

package word;

import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.usermodel.*;

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

public class Word {
    public static void main(String[] args) {
        try {
            // 打开 input01.docx 文件
            FileInputStream fis = new FileInputStream("08-00计算公式(第1版).docx");
            XWPFDocument doc1 = new XWPFDocument(OPCPackage.open(fis));

            // 打开 input03.docx 文件
            FileInputStream fis2 = new FileInputStream("input03.docx");
            XWPFDocument doc2 = new XWPFDocument(OPCPackage.open(fis2));

            // 获取'应变计'书签位置的段落
            XWPFParagraph bookmarkParagraph = doc2.getParagraphs().stream()
                    .filter(p -> p.getCTP().getBookmarkStartList().stream()
                            .anyMatch(b -> b.getName().equals("应变计")))
                    .findFirst().orElse(null);

            if (bookmarkParagraph != null) {
                // 清空'应变计'书签位置的段落内容
                for (int i = bookmarkParagraph.getRuns().size() - 1; i >= 0; i--) {
                    bookmarkParagraph.removeRun(i);
                }

                // 复制 input01.docx 文件的内容到'应变计'书签位置的段落
                for (XWPFParagraph paragraph : doc1.getParagraphs()) {
                    XWPFParagraph newParagraph = doc2.createParagraph();
                    newParagraph.getCTP().setPPr(paragraph.getCTP().getPPr());
                    for (XWPFRun run : paragraph.getRuns()) {
                        XWPFRun newRun = newParagraph.createRun();
                        newRun.getCTR().setRPr(run.getCTR().getRPr());
                        newRun.setText(run.getText(0));
                    }
                }

                // 复制 input01.docx 文件的表格到'应变计'书签位置的段落
                for (XWPFTable table : doc1.getTables()) {
                    XWPFTable newTable = doc2.createTable();
                    newTable.getCTTbl().setTblPr(table.getCTTbl().getTblPr());
                    for (XWPFTableRow row : table.getRows()) {
                        XWPFTableRow newRow = newTable.createRow();
                        newRow.getCtRow().setTrPr(row.getCtRow().getTrPr());
                        for (XWPFTableCell cell : row.getTableCells()) {
                            XWPFTableCell newCell = newRow.createCell();
                            newCell.getCTTc().setTcPr(cell.getCTTc().getTcPr());
                            for (XWPFParagraph paragraph : cell.getParagraphs()) {
                                XWPFParagraph newParagraph = newCell.addParagraph();
                                newParagraph.getCTP().setPPr(paragraph.getCTP().getPPr());
                                for (XWPFRun run : paragraph.getRuns()) {
                                    XWPFRun newRun = newParagraph.createRun();
                                    newRun.getCTR().setRPr(run.getCTR().getRPr());
                                    newRun.setText(run.getText(0));
                                }
                            }
                        }
                    }
                }
            }

            // 保存修改后的 input03.docx 文件
            FileOutputStream fos = new FileOutputStream("input04.docx");
            doc2.write(fos);

            // 关闭所有打开的文件流
            fis.close();
            fis2.close();
            fos.close();

            System.out.println("内容复制完成!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

使用说明

  1. 确保你已经安装了 Apache POI 库。
  2. 将代码中的 "input01.docx" 替换为要复制内容的 Word 文档路径。
  3. 将代码中的 "input03.docx" 替换为要粘贴内容的 Word 文档路径。
  4. 将代码中的 "应变计" 替换为要粘贴内容的书签名称。
  5. 运行代码,将在 "input03.docx" 文件中将 "应变计" 书签位置的内容替换为 "input01.docx" 文件的内容。

注意

  • 本示例代码仅复制文本内容,不包含图片、表格等其他元素。
  • 你可以根据需要修改代码,以实现更复杂的功能。
  • Apache POI 库的版本可能会影响代码的运行结果。

希望本指南能够帮助你使用 Java Apache POI 库完成 Word 文档书签内容复制的操作。

Java Apache POI Word 文档书签内容复制 - 使用指南

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

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