比較 Excel 檔案(Java)與 GroupDocs 文件比較 API

是否曾花了數小時手動比較文件,逐行搜尋變更?無論你是在追蹤合約修訂、審閱程式碼文件,或是需要 compare excel files java 以製作財務報告,手動文件比較既耗時又容易出錯。在本指南中,你將學會使用 GroupDocs.Comparison for Java 以快速、可靠的方式比較 Excel 活頁簿(以及許多其他格式)。

快速答案

Comparer 類別是載入來源文件並執行比較的核心元件。
CompareOptions 提供一組可設定的參數,用以控制比較的執行方式。
StyleSettings 讓你自訂輸出報告中插入、刪除與變更元素的視覺外觀。

  • GroupDocs 能在 Java 中比較 Excel 檔案嗎? 是的,只需使用 Comparer 類別載入 .xlsx 檔案,然後呼叫 compare
  • 如何忽略頁首/頁尾?CompareOptions 中設定 setHeaderFootersComparison(false)
  • 大型 PDF 該怎麼辦? 增加 JVM 堆積,啟用記憶體最佳化,並使用串流模式。
  • 我可以比較受密碼保護的 PDF 嗎? 在建立 Comparer 時提供密碼。
  • 有辦法變更標示顏色嗎? 使用 StyleSettings 針對插入、刪除與變更項目設定顏色。

什麼是 compare excel files java?

compare excel files java 是使用 Java 程式化偵測兩個 Excel 活頁簿之間儲存格層級差異的過程。GroupDocs.Comparison API 會載入每個試算表,評估每個儲存格、列與公式,然後產生差異報告,以清晰的視覺格式突顯新增、刪除與修改。

為何使用 Java 文件比較 API?

自動化的商業案例

手動文件比較不僅繁瑣,還存在風險。研究顯示,人工審閱文件時大約會漏掉 20 % 的重要變更。API 消除這種風險,並帶來可衡量的生產力提升:

  • 99.9 % 準確率 – 每個字元層級的變更都會被捕捉。
  • 速度 – 在標準伺服器上,於 30 秒 內比較 100 頁 PDF。
  • 一致性 – 在所有文件類型中提供統一的標示與報告。
  • 可擴展性 – 批次處理數千個檔案,無需人工干預。

何時使用文件比較 API

當你需要以下情境時,將獲得最大的回報:

  • 審閱法律合約 – 自動標示條款修訂。
  • 追蹤技術文件 – 清楚看到 API 規格發布之間的變更。
  • 管理內容資產 – 比較行銷文案、使用手冊或部落格草稿。
  • 稽核合規性 – 確保政策更新被捕捉並記錄。
  • 補充版本控制 – 為非程式碼的產出提供易讀的差異。

支援的檔案格式與功能

GroupDocs.Comparison for Java 支援 50+ 種輸入與輸出格式,包括:

  • 文件: DOCX, DOC, PDF, RTF, ODT
  • 試算表: XLSX, XLS, CSV, ODS
  • 簡報: PPTX, PPT, ODP
  • 文字: TXT, HTML, XML, MD
  • 影像: PNG, JPEG, BMP, GIF(視覺比較)

進階功能

  • 受密碼保護的文件比較
  • 多語言偵測與比較
  • 依文件類型自訂靈敏度設定
  • 批次處理多組文件對
  • 雲端原生與本地部署選項

前置條件與設定

系統需求

  1. Java Development Kit (JDK): 8 版或以上(建議使用 JDK 11+)
  2. 建置工具: Maven 3.6+ 或 Gradle 6.0+
  3. 記憶體: 大檔案最低 4 GB RAM
  4. 儲存空間: 至少 500 MB 可用於暫存比較資料

Maven 設定

將 GroupDocs 的儲存庫與相依性加入你的 pom.xml。這可確保取得官方發行版:

<repositories>
    <repository>
        <id>repository.groupdocs.com</id>
        <name>GroupDocs Repository</name>
        <url>https://releases.groupdocs.com/comparison/java/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>com.groupdocs</groupId>
        <artifactId>groupdocs-comparison</artifactId>
        <version>25.2</version>
    </dependency>
</dependencies>

授權設定

開發與測試用

正式環境

在應用程式啟動時初始化授權:

// License initialization - do this once at application startup
com.groupdocs.comparison.License license = new com.groupdocs.comparison.License();
license.setLicense("path/to/your/license/file.lic");

小技巧: 將授權檔案放在 resources 資料夾,並使用 getClass().getResourceAsStream() 載入,以實現可移植部署。

核心實作指南

功能 1:忽略頁首與頁尾比較

setHeaderFootersComparison 方法會停用頁首與頁尾內容的比較,避免不相關的差異出現在差異報告中。

為何重要: 頁首與頁尾常包含動態資料(時間戳記、頁碼),在版本間會變動卻與內容審閱無關。忽略它們可減少噪音並加快處理速度。

實務情境: 比較兩份合約草稿時,每個版本的頁尾都會新增日期戳記;此時你只關心條款的變更。

import com.groupdocs.comparison.Comparer;
import com.groupdocs.comparison.options.CompareOptions;
import java.io.FileOutputStream;

public class IgnoreHeaderFooterExample {
    public static void main(String[] args) throws Exception {
        String outputFileName = "YOUR_OUTPUT_DIRECTORY/IgnoreHeaderFooter_result.docx";

        try (OutputStream resultStream = new FileOutputStream(outputFileName);
             Comparer comparer = new Comparer("YOUR_DOCUMENT_DIRECTORY/source_with_footer.docx")) {

            comparer.add("YOUR_DOCUMENT_DIRECTORY/target_with_footer.docx");

            // Set comparison options to ignore headers and footers
            CompareOptions compareOptions = new CompareOptions.Builder()
                    .setHeaderFootersComparison(false)
                    .build();

            final Path resultPath = comparer.compare(resultStream, new SaveOptions(), compareOptions);
        }
    }
}

Key Benefits:

  • 更乾淨的差異結果
  • 較少誤報
  • 因跳過這些區段而加快比較速度

功能 2:設定輸出紙張大小以產生專業報告

PaperSize 列舉定義了產生 PDF 時使用的標準頁面尺寸。

商業情境: 法務團隊常需要特定紙張大小的可列印比較報告,以供法院提交或客戶交付。

使用方式:CompareOptions 中使用 PaperSize 列舉以設定目標尺寸。

import com.groupdocs.comparison.Comparer;
import com.groupdocs.comparison.options.CompareOptions;
import com.groupdocs.comparison.options.enums.PaperSize;

public class SetOutputPaperSizeExample {
    public static void main(String[] args) throws Exception {
        String outputFileName = "YOUR_OUTPUT_DIRECTORY/SetOutputPaperSize_result.docx";

        try (OutputStream resultStream = new FileOutputStream(outputFileName);
             Comparer comparer = new Comparer("YOUR_DOCUMENT_DIRECTORY/source_word.docx")) {

            comparer.add("YOUR_DOCUMENT_DIRECTORY/target1_word.docx");

            // Set the paper size to A6
            CompareOptions compareOptions = new CompareOptions.Builder()
                    .setPaperSize(PaperSize.A6)
                    .build();

            final Path resultPath = comparer.compare(resultStream, compareOptions);
        }
    }
}

支援的尺寸包括 A0‑A10、Letter、Legal、Tabloid 以及自訂尺寸。對於歐洲客戶可選 A4,對於美國合作夥伴則選 Letter。

功能 3:微調比較靈敏度

setSensitivityOfComparison 方法調整比較引擎評估變更的細緻程度,範圍從主要結構編輯到單一字元差異。

挑戰: 不同文件類型需要不同的細緻度。法律合約需要字元層級的精確度,而行銷文案可能只需段落層級的變更。

Sensitivity Scale (0‑100):

  • 0‑25: 僅重大變更(段落新增/刪除)
  • 26‑50: 中等變更(句子編輯)
  • 51‑75: 詳細變更(字詞層級)
  • 76‑100: 細緻變更(字元層級)
import com.groupdocs.comparison.Comparer;
import com.groupdocs.comparison.options.CompareOptions;

public class AdjustComparisonSensitivityExample {
    public static void main(String[] args) throws Exception {
        String outputFileName = "YOUR_OUTPUT_DIRECTORY/AdjustComparisonSensitivity_result.docx";

        try (OutputStream resultStream = new FileOutputStream(outputFileName);
             Comparer comparer = new Comparer("YOUR_DOCUMENT_DIRECTORY/source_word.docx")) {

            comparer.add("YOUR_DOCUMENT_DIRECTORY/target1_word.docx");

            // Set sensitivity to 100 for maximum detail
            CompareOptions compareOptions = new CompareOptions.Builder()
                    .setSensitivityOfComparison(100)
                    .build();

            final Path resultPath = comparer.compare(resultStream, compareOptions);
        }
    }
}

Best‑Practice Settings:

  • 法律文件: 90‑100
  • 行銷內容: 40‑60
  • 技術規格: 70‑80

功能 4:自訂變更樣式以提升視覺傳達

StyleSettings 物件讓你為插入、刪除與修改的內容定義顏色、字型、邊框及其他視覺提示。

為何自訂樣式重要: 預設的標示可能與企業品牌或無障礙指南衝突。客製化顏色、字型與邊框可讓差異即時易於理解。

範例: 刪除使用紅色背景,插入使用綠色,修改使用藍色。

import com.groupdocs.comparison.Comparer;
import com.groupdocs.comparison.options.CompareOptions;
import com.groupdocs.comparison.options.save.SaveOptions;
import com.groupdocs.comparison.options.style.StyleSettings;

import java.awt.Color;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class CustomizeChangesStylesStreamExample {
    public static void main(String[] args) throws Exception {
        String outputFileName = "YOUR_OUTPUT_DIRECTORY/CustomizeChangesStylesStream_result.docx";

        try (InputStream sourceFile = new FileInputStream("YOUR_DOCUMENT_DIRECTORY/source_word.docx");
             InputStream targetFile = new FileInputStream("YOUR_DOCUMENT_DIRECTORY/target1_word.docx");
             OutputStream resultStream = new FileOutputStream(outputFileName);
             Comparer comparer = new Comparer(sourceFile)) {

            comparer.add(targetFile);

            // Customize change styles for professional appearance
            StyleSettings insertedStyle = new StyleSettings();
            insertedStyle.setHighlightColor(Color.GREEN); // Green for additions
            StyleSettings deletedStyle = new StyleSettings();
            deletedStyle.setHighlightColor(Color.RED); // Red for deletions
            StyleSettings changedStyle = new StyleSettings();
            changedStyle.setHighlightColor(Color.BLUE); // Blue for modifications

            CompareOptions compareOptions = new CompareOptions.Builder()
                    .setInsertedItemStyle(insertedStyle)
                    .setDeletedItemStyle(deletedStyle)
                    .setChangedItemStyle(changedStyle)
                    .build();

            final Path resultPath = comparer.compare(resultStream, compareOptions);
        }
    }
}

StyleSettings 的進階選項允許你調整字型粗細、大小、背景透明度、邊框樣式以及刪除線行為。

如何在比較報告中設定 Java 的紙張大小

直接透過 CompareOptions 中的 PaperSize 列舉設定紙張大小。將 PaperSize.A6 替換為任何支援的常數(例如 PaperSize.LETTER),以符合區域列印標準。這可確保產生的 PDF 報告正確列印,無需手動縮放。此外,你還可以將此設定與自訂邊距和方向旗標結合,產生符合組織文件提交指南的版面,確保每次都有專業外觀。

常見問題與故障排除

大型文件的記憶體管理

問題: 比較大於 50 MB 的檔案時出現 OutOfMemoryError
解決方案: 增加 JVM 堆積大小(-Xmx8g)並啟用串流模式。

# Increase heap size for large document processing
java -Xmx4g -XX:MaxMetaspaceSize=512m YourComparisonApp

處理損毀或受密碼保護的檔案

當 API 遇到未提供密碼的加密文件時,會拋出 PasswordRequiredException

問題: 鎖定的文件比較失敗。
預防措施: 在建立 Comparer 時提供密碼,並捕捉 PasswordRequiredException

// Check document accessibility before comparison
try {
    Comparer comparer = new Comparer(sourceFile, "password123");
    // Document loaded successfully, proceed with comparison
} catch (PasswordRequiredException ex) {
    // Handle password‑protected documents
    log.error("Document requires password: " + sourceFile);
} catch (CorruptedFileException ex) {
    // Handle corrupted files gracefully
    log.error("File corruption detected: " + sourceFile);
}

批次處理的效能最佳化

挑戰: 高效處理超過 100 組文件對。
解決方案: 使用固定大小的執行緒池,將每個比較作為獨立任務提交。

ExecutorService executor = Executors.newFixedThreadPool(4);
List<Future<ComparisonResult>> futures = new ArrayList<>();

for (DocumentPair pair : documentPairs) {
    futures.add(executor.submit(() -> compareDocuments(pair)));
}

// Wait for all comparisons to complete
for (Future<ComparisonResult> future : futures) {
    ComparisonResult result = future.get();
    // Process results
}
executor.shutdown();

特定格式問題

  • 掃描 PDF: 在比較前先進行 OCR 前處理。
  • Word 文件: 停用現有的「追蹤變更」功能,以避免誤報差異。
  • 嵌入物件: 先抽取再分別比較,以確保準確性。

最佳實踐與效能技巧

1. 文件前處理

在比較前去除不必要的中繼資料並統一字型,可提升速度與準確度。

// Example preprocessing workflow
public void preprocessDocument(String filePath) {
    // Remove comments and tracked changes
    // Standardize formatting
    // Extract text‑only version for pure content comparison
}

2. 最佳化設定檔

為每種文件類型(法律、行銷、技術)建立可重複使用的 CompareOptions 預設,並在整個流程中重複使用。

public class ComparisonProfiles {
    public static CompareOptions getLegalDocumentProfile() {
        return new CompareOptions.Builder()
                .setSensitivityOfComparison(95)
                .setHeaderFootersComparison(false)
                .setShowRevisions(true)
                .build();
    }
    
    public static CompareOptions getMarketingContentProfile() {
        return new CompareOptions.Builder()
                .setSensitivityOfComparison(45)
                .setIgnoreFormatting(true)
                .setFocusOnContent(true)
                .build();
    }
}

3. 完整的錯誤處理與日誌記錄

ComparisonException 表示比較過程中發生失敗,並提供詳細的診斷資訊。將比較呼叫包在 try‑catch 區塊中,記錄 ComparisonException 細節,必要時回退至安全的預設值。

public ComparisonResult safeCompareDocuments(String source, String target) {
    try {
        return performComparison(source, target);
    } catch (Exception ex) {
        logger.error("Comparison failed for {} vs {}: {}", source, target, ex.getMessage());
        return ComparisonResult.failure(ex.getMessage());
    }
}

4. 快取與智慧重用

  • 快取相同檔案對的差異結果。
  • 儲存文件指紋(雜湊)以跳過未變更的檔案。
  • 對非關鍵比較使用非同步佇列,以保持 UI 響應。

真實情境整合案例

情境 1:自動化合約審查流程

@Service
public class ContractReviewService {
    
    public void processContractRevision(String originalContract, String revisedContract) {
        CompareOptions legalOptions = ComparisonProfiles.getLegalDocumentProfile();
        
        try (Comparer comparer = new Comparer(originalContract)) {
            comparer.add(revisedContract);
            Path result = comparer.compare(generateOutputPath(), legalOptions);
            
            // Send comparison report to legal team
            emailService.sendComparisonReport(result, legalTeamEmails);
            
            // Log changes for audit trail
            auditService.logDocumentChanges(extractChanges(result));
        }
    }
}

情境 2:內容管理系統整合

@RestController
public class DocumentComparisonController {
    
    @PostMapping("/api/documents/compare")
    public ResponseEntity<ComparisonReport> compareDocuments(
            @RequestParam("source") MultipartFile source,
            @RequestParam("target") MultipartFile target,
            @RequestParam(value = "sensitivity", defaultValue = "75") int sensitivity) {
        
        CompareOptions options = new CompareOptions.Builder()
                .setSensitivityOfComparison(sensitivity)
                .build();
                
        ComparisonReport report = documentComparisonService.compare(source, target, options);
        return ResponseEntity.ok(report);
    }
}

常見問答

Q:我可以在 GroupDocs for Java 的比較中忽略頁首與頁尾嗎?
A:可以,在 CompareOptions 上呼叫 setHeaderFootersComparison(false)。此舉會移除差異報告中動態的頁首/頁尾噪音。

Q:如何在 Java 中使用 GroupDocs 設定輸出紙張大小?
A:在 CompareOptions 中使用 setPaperSize(PaperSize.A6)(或其他列舉值)。這會產生符合所選尺寸的可列印 PDF。

Q:能否針對不同文件類型微調比較靈敏度?
A:當然可以。對法律合約使用 setSensitivityOfComparison(85),對行銷草稿使用 setSensitivityOfComparison(45),以控制細緻度。

Q:我可以自訂比較時插入、刪除與變更文字的樣式嗎?
A:可以。為每種變更類型建立 StyleSettings 實例,並設定顏色、字型或邊框,然後再傳入 CompareOptions

Q:開始使用 GroupDocs Comparison for Java 的前置條件是什麼?
A:你需要 JDK 8+(建議 JDK 11+)、Maven 3.6+ 或 Gradle 6.0+、至少 4 GB RAM,以及有效的 GroupDocs 授權(提供免費試用)。

Q:如何在 GroupDocs.Comparison 中處理受密碼保護的文件?
A:在建立 Comparer 時將密碼作為第二個參數傳入,例如 new Comparer(sourceFile, "myPassword")。捕捉 PasswordRequiredException 以優雅地處理錯誤。

Q:GroupDocs.Comparison for Java 支援哪些檔案格式?
A:支援超過 50 種格式,包括 DOCX、PDF、XLSX、PPTX、TXT、HTML、XML 以及常見影像類型(PNG、JPEG)。API 會自動偵測格式,但你也可以明確指定以提升批次效能。

結論

透過使用 GroupDocs.Comparison for Java,你可以自動化比較 Excel 活頁簿(以及任何其他支援格式)的繁瑣工作,達到精確、快速且一致的效果。將本指南中的程式碼片段與最佳實踐技巧整合到 CI/CD 流程、文件管理系統或自訂稽核工具中,即可獲得可衡量的生產力提升。


最後更新: 2026-05-16
測試版本: GroupDocs.Comparison 25.2 for Java
作者: GroupDocs

// Use streaming for memory efficiency
try (Comparer comparer = new Comparer(sourceStream)) {
    // Process in chunks for very large documents
    CompareOptions options = new CompareOptions.Builder()
            .setMemoryOptimization(true) // Enable memory optimization
            .build();
}

相關教學