我要将input01docx中应变计书签至应变计书签的下一个书签 内的所有内容 和input02docx中位移计书签至位移计书签的下一个书签 内的所有内容 复制到input03docx中原本内容的下方Java代码
以下是使用Java代码实现将两个Word文档中指定书签内容复制到另一个文档的下方的示例代码:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.*;
public class WordBookmarkCopy {
public static void main(String[] args) {
String inputFilePath1 = "input01.docx";
String inputFilePath2 = "input02.docx";
String outputFilePath = "input03.docx";
String bookmarkName1 = "应变计";
String bookmarkName2 = "位移计";
try {
// 读取第一个输入文档
XWPFDocument inputDoc1 = new XWPFDocument(new FileInputStream(inputFilePath1));
// 获取第一个书签的内容
String bookmarkContent1 = getBookmarkContent(inputDoc1, bookmarkName1);
// 读取第二个输入文档
XWPFDocument inputDoc2 = new XWPFDocument(new FileInputStream(inputFilePath2));
// 获取第二个书签的内容
String bookmarkContent2 = getBookmarkContent(inputDoc2, bookmarkName2);
// 读取输出文档
XWPFDocument outputDoc = new XWPFDocument(new FileInputStream(outputFilePath));
// 获取输出文档的最后一个段落
XWPFParagraph lastParagraph = outputDoc.getLastParagraph();
// 在输出文档的最后一个段落后插入第一个书签的内容
XWPFParagraph newParagraph1 = outputDoc.createParagraph();
newParagraph1.createRun().setText(bookmarkContent1);
outputDoc.setParagraph(lastParagraph, outputDoc.getPosOfParagraph(newParagraph1));
// 在输出文档的最后一个段落后插入第二个书签的内容
XWPFParagraph newParagraph2 = outputDoc.createParagraph();
newParagraph2.createRun().setText(bookmarkContent2);
outputDoc.setParagraph(lastParagraph, outputDoc.getPosOfParagraph(newParagraph2));
// 保存输出文档
FileOutputStream fos = new FileOutputStream(outputFilePath);
outputDoc.write(fos);
fos.close();
System.out.println("内容复制完成!");
} catch (Exception e) {
e.printStackTrace();
}
}
// 获取指定书签的内容
private static String getBookmarkContent(XWPFDocument doc, String bookmarkName) {
for (XWPFParagraph paragraph : doc.getParagraphs()) {
for (XWPFRun run : paragraph.getRuns()) {
for (CTBookmark bookmark : run.getCTR().getBookmarkStartList()) {
if (bookmark.getName().equals(bookmarkName)) {
StringBuilder bookmarkContent = new StringBuilder();
while (!run.getCTR().getBookmarkEndList().contains(bookmark)) {
bookmarkContent.append(run.getText(0));
run = paragraph.getRuns().get(paragraph.getRuns().indexOf(run) + 1);
}
return bookmarkContent.toString();
}
}
}
}
return "";
}
}
请确保已经添加了Apache POI的依赖,可以在Maven项目中的pom.xml文件中添加以下依赖:
<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>
这段代码首先读取输入文档中的内容,然后从输入文档中获取指定书签的内容。接下来,它读取输出文档并在最后一个段落后插入两个书签的内容。最后,它保存输出文档并打印一条完成消息。
请根据实际情况修改输入和输出文件的路径以及书签的名称。
原文地址: https://www.cveoy.top/t/topic/h0bC 著作权归作者所有。请勿转载和采集!