首頁 > 軟體

Java 獲取Word中所有的插入和刪除修訂的方法

2022-04-06 13:01:37

在 Word 檔案中啟用跟蹤更改功能後,會記錄檔案中的所有編輯行為,例如插入、刪除、替換和格式更改。對插入或刪除的內容,可通過本文中介紹的方法來獲取。

​​引入Jar​​

​​方法1​​

手動引入:將Free Spire.Doc for Java下載到本地,解壓,找到lib資料夾下的Spire.Doc.jar檔案。在IDEA中開啟如下介面,將本地路徑中的jar檔案引入Java程式:​

​​方法2​​

通過Maven倉庫下載。如下設定pom.xml:

<repositories>
<repository>
<id>com.e-iceblue</id>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.doc.free</artifactId>
<version>5.2.0</version>
</dependency>
</dependencies>

​​獲取插入、刪除的修訂​​

  • 建立一個​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.Paragraph;
import com.spire.doc.fields.TextRange;
import com.spire.doc.formatting.revisions.EditRevision;
import com.spire.doc.formatting.revisions.EditRevisionType;

import java.io.FileWriter;

public class GetAllRevisions {
public static void main(String[] args)throws Exception {
//載入範例 Word 檔案
Document document = new Document();
document.loadFromFile("test.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();

//獲取插入的段落文字內容
String insertRevisionString = para.getText();

//獲取插入修訂型別
EditRevisionType insType = insRevison.getType();

insertRevision.append("Type: " + insType + " n");
//獲取插入修訂作者
String insAuthor = insRevison.getAuthor();
insertRevision.append("Author: " + insAuthor + " n" + "InsertPara:"+ insertRevisionString );

}

//確定段落是否為刪除修訂
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.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");
String deletetext = textRange.getText();
deleteRevision.append("Delete text:" + deletetext +" n");
}

//確定文字範圍是否為插入修訂,並獲取插入修訂的型別、作者及文字內容。
else 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");
String insertText = textRange.getText();
insertRevision.append("insertText:"+insertText);
}
}
}
}
}
}
//儲存插入修訂內容為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();
}
}

獲取結果:

到此這篇關於Java 獲取Word中所有的插入和刪除修訂的方法的文章就介紹到這了,更多相關獲取Word插入和刪除修訂內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com