我要将input01docx中应变计书签 的下方文字 和input02docx中位移计书签 的下方文字 复制到input03docx中的内容下面input01docx和input02docx的内容截取范围为下一个书签之上Java代码
以下是使用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中“位移计”书签下方的内容。
原文地址: https://www.cveoy.top/t/topic/h0a0 著作权归作者所有。请勿转载和采集!