以下是使用Java代码实现将input01.docx中“应变计”书签的下方文字和input02.docx中“位移计”书签的下方文字复制到input03.docx中的内容下面的示例代码:

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

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

public class CopyBookmarkText {

    public static void main(String[] args) {
        try {
            // 打开输入文件1
            FileInputStream input01 = new FileInputStream("input01.docx");
            XWPFDocument doc01 = new XWPFDocument(OPCPackage.open(input01));

            // 打开输入文件2
            FileInputStream input02 = new FileInputStream("input02.docx");
            XWPFDocument doc02 = new XWPFDocument(OPCPackage.open(input02));

            // 打开输出文件
            FileOutputStream output = new FileOutputStream("input03.docx");
            XWPFDocument doc03 = new XWPFDocument();

            // 复制输入文件1的内容
            copyContent(doc01, doc03, "应变计");

            // 复制输入文件2的内容
            copyContent(doc02, doc03, "位移计");

            // 保存输出文件
            doc03.write(output);

            // 关闭文件流
            output.close();
            doc03.close();
            doc02.close();
            doc01.close();

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

    private static void copyContent(XWPFDocument sourceDoc, XWPFDocument targetDoc, String bookmarkName) {
        List<XWPFParagraph> paragraphs = sourceDoc.getParagraphs();
        Iterator<XWPFParagraph> iterator = paragraphs.iterator();

        boolean copy = false;
        while (iterator.hasNext()) {
            XWPFParagraph paragraph = iterator.next();
            if (copy) {
                XWPFParagraph newParagraph = targetDoc.createParagraph();
                copyParagraph(paragraph, newParagraph);
            }

            if (paragraph.getCTP().getBookmarkStartList().size() > 0) {
                for (CTBookmark bookmark : paragraph.getCTP().getBookmarkStartList()) {
                    if (bookmark.getName().equals(bookmarkName)) {
                        copy = true;
                    }
                }
            }
        }
    }

    private static void copyParagraph(XWPFParagraph sourceParagraph, XWPFParagraph targetParagraph) {
        targetParagraph.getCTP().setPPr(sourceParagraph.getCTP().getPPr());
        for (XWPFRun run : sourceParagraph.getRuns()) {
            XWPFRun newRun = targetParagraph.createRun();
            newRun.getCTR().setRPr(run.getCTR().getRPr());
            newRun.setText(run.getText(0));
        }
    }
}

请确保已经引入Apache POI的依赖库,可以在Maven中添加以下依赖:

<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>

在代码中,我们首先打开输入的两个文件(input01.docx和input02.docx),然后创建一个新的输出文件(input03.docx)。接下来,我们调用copyContent方法来复制输入文件中书签下方的内容到输出文件中。copyContent方法会遍历输入文件的段落,当遇到指定的书签时,将copy标志设为true,开始复制内容。copyParagraph方法用于复制段落的格式和文本内容。

最后,我们保存输出文件并关闭所有的文件流。输出文件中将包含input01.docx中“应变计”书签下方的内容和input02.docx中“位移计”书签下方的内容。

我要将input01docx中应变计书签 的下方文字 和input02docx中位移计书签 的下方文字 复制到input03docx中的内容下面input01docx和input02docx的内容截取范围为下一个书签之上Java代码

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

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