在 Word 文档中启用跟踪更改功能后,它会记录文档中的所有编辑行为,例如插入、删除、替换和格式更改。跟踪更改是一项很棒的功能,可让您查看文档进行了哪些更改。本教程展示了如何使用 Spire.Doc for Java 获取 Word 中所有修订。
安装 Spire.Doc for Java
首先,您需要在 Java 程序中添加 Spire.Doc.jar 文件作为依赖项。JAR 文件可以从此链接下载。如果您使用 Maven,则可以将以下代码添加到项目的 pom.xml 文件中,从而轻松地在应用程序中导入 JAR 文件。
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.doc</artifactId>
<version>12.11.9</version>
</dependency>
</dependencies>
获取 Word 中所有修订
详细步骤如下。
- 创建一个 Document 实例并使用 Document.loadFromFile() 方法加载一个示例 Word 文档。
- 创建一个 StringBuilder 对象,然后使用 StringBuilder.append() 方法记录数据。
- 遍历所有 section 和 section 中 body 下的每一个元素。
- 使用 Paragraph.isInsertRevision() 方法确定段落是否为插入修订。如果是,请使用 Paragraph.getInsertRevision() 方法获取插入修订。然后使用 EditRevision.getType() 方法和 EditRevision.getAuthor() 方法获取修订类型和作者。
- 使用 Paragraph.inDeleteRevision() 方法确定段落是否为删除修订。如果是,请使用 Paragraph.getDeleteRevision() 方法获取删除修订。然后使用 EditRevision.getType() 方法和 EditRevision.getAuthor() 方法获取修订类型和作者。
- 遍历段落中的所有元素以获取文本范围的修订。
- 使用 FileWriter.write() 方法将 StringBuilder 的内容写入 txt 文档。
- Java
import com.spire.doc.*;
import com.spire.doc.documents.*;
import com.spire.doc.fields.*;
import com.spire.doc.formatting.revisions.*;
import java.io.FileWriter;
public class getRevisions {
public static void main(String[] args) throws Exception {
//加载示例 Word 文档
Document document = new Document();
document.loadFromFile("C:\\Users\\Administrator\\Desktop\\test file.docx");
//创建一个 StringBuilder 对象以获取插入修订
StringBuilder insertRevision = new StringBuilder();
insertRevision.append("Insert revisions:"+"\n");
int index_insertRevision = 0;
//创建一个 StringBuilder 对象以获取删除修订
StringBuilder deleteRevision = new StringBuilder();
deleteRevision.append("Delete revisions:"+"\n");
int index_deleteRevision = 0;
//遍历所有节
for (Section sec : (Iterable<Section>) document.getSections())
{
//遍历section中body下的元素
for(DocumentObject docItem : (Iterable<DocumentObject>)sec.getBody().getChildObjects())
{
if (docItem instanceof Paragraph)
{
Paragraph para = (Paragraph)docItem;
//确定段落是否为插入修订
if (para.isInsertRevision())
{
index_insertRevision++;
insertRevision.append("Index: " + index_insertRevision+"\n");
//获取插入修订
EditRevision insRevison = para.getInsertRevision();
//获取插入修订类型
EditRevisionType insType = insRevison.getType();
insertRevision.append("Type: " + insType+"\n");
//获取插入修订作者
String insAuthor = insRevison.getAuthor();
insertRevision.append("Author: " + insAuthor + "\n");
}
//确定段落是否为删除修订
else if (para.isDeleteRevision())
{
index_deleteRevision++;
deleteRevision.append("Index: " + index_deleteRevision +"\n");
EditRevision delRevison = para.getDeleteRevision();
EditRevisionType delType = delRevison.getType();
deleteRevision.append("Type: " + delType+ "\n");
String delAuthor = delRevison.getAuthor();
deleteRevision.append("Author: " + delAuthor + "\n");
}
//遍历段落中的元素
for(DocumentObject obj : (Iterable<DocumentObject>)para.getChildObjects())
{
if (obj instanceof TextRange)
{
TextRange textRange = (TextRange)obj;
//确定文本范围是否为插入修订
if (textRange.isInsertRevision())
{
index_insertRevision++;
insertRevision.append("Index: " + index_insertRevision +"\n");
EditRevision insRevison = textRange.getInsertRevision();
EditRevisionType insType = insRevison.getType();
insertRevision.append("Type: " + insType + "\n");
String insAuthor = insRevison.getAuthor();
insertRevision.append("Author: " + insAuthor + "\n");
}
else if (textRange.isDeleteRevision())
{
index_deleteRevision++;
deleteRevision.append("Index: " + index_deleteRevision +"\n");
//确定文本范围是否为删除修订
EditRevision delRevison = textRange.getDeleteRevision();
EditRevisionType delType = delRevison.getType();
deleteRevision.append("Type: " + delType+"\n");
String delAuthor = delRevison.getAuthor();
deleteRevision.append("Author: " + delAuthor+"\n");
}
}
}
}
}
}
//保存到 .txt 文件
FileWriter writer1 = new FileWriter("insertRevisions.txt");
writer1.write(insertRevision.toString());
writer1.flush();
writer1.close();
//保存到 .txt 文件
FileWriter writer2 = new FileWriter("deleteRevisions.txt");
writer2.write(deleteRevision.toString());
writer2.flush();
writer2.close();
}
}
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请 该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。 获取有效期 30 天的临时许可证。