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('input01.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('input03.docx');
            doc2.write(fos);

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

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

注意:

  • 该代码使用 Apache POI 库 5.2.2 版本。
  • 文件名 'input01.docx' 和 'input03.docx' 应根据实际情况进行修改。
  • 书签名 '应变计' 应根据实际情况进行修改。
  • 该代码示例仅演示了复制段落和表格,其他元素(如图片)需要根据实际情况进行处理。
  • 此代码无法保证所有 Word 文档的格式完整保留,可能会出现部分格式丢失的情况。
  • 为了防止数据丢失,建议在执行代码前备份原始文件。
  • 如果您遇到问题,请检查 Apache POI 文档以获取更多帮助。

代码功能:

  1. 打开两个 Word 文档,分别为 'input01.docx' 和 'input03.docx'。
  2. 在 'input03.docx' 中查找名为 '应变计' 的书签。
  3. 如果找到书签,则清空书签所在段落的内容。
  4. 将 'input01.docx' 中的所有段落和表格复制到 'input03.docx' 中书签所在段落。
  5. 保存修改后的 'input03.docx' 文件。
  6. 关闭所有打开的文件流。

代码优点:

  • 使用 Java 代码实现,方便集成到其他项目中。
  • 可以根据需要修改文件路径、书签名称和代码逻辑。
  • 能够复制 Word 文档中的段落和表格内容。

代码缺点:

  • 可能无法完全保留所有 Word 文档格式。
  • 需谨慎使用,避免数据丢失。
  • 需要安装 Apache POI 库。

使用场景:

  • 将一个 Word 文档的内容复制到另一个 Word 文档中。
  • 更新 Word 文档中的内容。
  • 自动生成 Word 文档。

其他信息:

  • Apache POI 库是一个开源库,提供对 Microsoft Office 文档格式(如 Word、Excel、PowerPoint)的读写操作功能。
  • 更多关于 Apache POI 库的信息请访问:https://poi.apache.org/docs/index.html
使用 Apache POI 库将 Word 文档内容复制到书签位置

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

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