如何在 C# 中使用串流比較 XLSX 檔案 – 完整指南

手動比較 Excel 試算表既繁瑣又容易出錯,尤其在需要驗證大型財務報告或稽核資料集時更是如此。在本教學中,您將學會如何使用 GroupDocs.Comparison for .NET 透過基於串流的處理有效比較 how to compare xlsx 檔案。我們會逐步說明每個步驟,解釋為何串流重要,並提供實用技巧,讓您直接套用於自己的專案。

快速解答

  • 什麼函式庫負責 Excel 比較? GroupDocs.Comparison for .NET。
  • 我可以在不將檔案儲存到磁碟的情況下比較檔案嗎? 是 — 使用串流直接處理記憶體中的資料。
  • 生產環境是否需要授權? 商業授權是必須的;亦提供免費試用版。
  • 支援哪些 .NET 版本? .NET Framework 4.5+、.NET Core 3.1+、.NET 5/6/7。
  • 支援多少種 Excel 格式? 超過 20 種,包括 .xls、.xlsx、.xlsm 與 .csv。

什麼是「how to compare xlsx」?

「How to compare xlsx」 指以程式方式偵測兩個 Excel 活頁簿檔案之間的差異。GroupDocs.Comparison for .NET 會讀取每個活頁簿,評估儲存格層級的變更,並產生帶有標示的結果文件,顯示插入、刪除與修改。比較結果會突顯變更的儲存格、列與工作表,讓您一目了然。

為何使用基於串流的比較?

串流處理透過分塊讀取檔案,減少記憶體壓力,而非一次將整個活頁簿載入 RAM。GroupDocs.Comparison 能處理 50 + 種輸入與輸出格式,並處理 多百頁的試算表,同時在一般伺服器硬體上將峰值記憶體使用量維持在 100 MB 以下。這使其非常適合用於 Web 服務、微服務與本地批次作業。

前置條件

  1. GroupDocs.Comparison for .NET – 從官方網站 此處 下載。
  2. C# 開發環境 – Visual Studio 2022 或任何支援 .NET 6+ 的 IDE。
  3. Excel 檔案 – 兩個您想比較的 .xlsx 活頁簿。
  4. 基本的串流概念 – 範例中會使用到 System.IO.Stream 的概念。

匯入命名空間

以下命名空間可讓您存取比較引擎與串流工具。GroupDocs.Comparison 命名空間包含核心比較類別,而 System.IO 提供處理串流所需的 FileStreamMemoryStream 類型。

步驟式實作指南

使用串流如何影響效能?

使用 File.OpenRead() 載入每個活頁簿,並將產生的串流直接傳遞給比較器。此做法避免暫存檔,將 SSD 上的 I/O 時間縮短最高 30 %,且整個流程完全在記憶體中執行,對高吞吐量的 Web API 極為重要。

步驟 1:初始化輸出變數

定義比較結果的儲存位置。使用 Path.Combine() 可確保在 Windows、Linux 或 macOS 上使用正確的目錄分隔符。

專業提示: 在正式環境中,將輸出寫入暫存資料夾或雲端儲存桶,以保持應用程式目錄整潔。

步驟 2:建立 Comparer 物件

Comparer 類別是協調兩個或多個文件比較的核心元件。

透過 File.OpenRead() 開啟來源活頁簿來建立 Comparer 實例。using 陳述式可確保檔案串流自動關閉,防止檔案句柄洩漏。

步驟 3:加入目標文件

將第二個活頁簿加入比較器。如果需要將一個主檔與多個變體比較,可串接多個目標——這在區域報表或版本控制情境中相當有用。

步驟 4:執行比較

呼叫 Compare 方法產生差異文件。結果寫入使用 File.Create() 建立的新串流。輸出檔會突顯所有變更的儲存格、列與工作表,讓視覺檢閱變得簡單。

Compare 方法執行比較並以串流形式返回結果文件。

步驟 5:顯示成功訊息

比較完成後,記錄包含輸出路徑的簡潔成功訊息。在實務 API 中,您會將串流返回給呼叫端,或儲存至雲端儲存以供日後取用。

常見問題與除錯

  • 檔案被佔用錯誤: 確保沒有其他程序(包括 Excel)開啟該檔案。使用 File.OpenRead() 開啟的串流會取得唯讀共享鎖定,減少衝突。
  • 大型檔案記憶體激增: 若活頁簿超過 100 MB,請啟用 ComparerOptionsEnableMemoryOptimization 旗標(若支援),並監控程序的私有記憶體。
  • 混合格式比較: GroupDocs.Comparison 支援相同格式的配對;請避免在同一次操作中比較 .xls.xlsx 檔案,以免產生版面不匹配。
  • 串流定位: 若重複使用同一串流,務必在傳遞給比較器前使用 stream.Seek(0, SeekOrigin.Begin) 重新定位。

健全的錯誤處理: 捕捉 ComparisonException 以處理損毀的活頁簿,並記錄檔名以供日後調查。
ComparisonException 由 GroupDocs.Comparison 在輸入文件損毀或使用不支援的格式時拋出。

效能與最佳實踐

  • 即時釋放串流: 將每個 FileStream 包在 using 區塊中。
  • 批次處理: 使用 Parallel.ForEach 搭配非同步比較器同時處理多組檔案對,但限制平行度以免 CPU 競爭過度。
  • 健全的錯誤處理: 捕捉 ComparisonException 以處理損毀的活頁簿,並記錄檔名以供日後調查。
  • 驗證輸入串流: 在比較前檢查 MIME 類型或檔案標頭,以提前拒絕非 Excel 上傳。

ComparerOptions 提供比較過程的設定,例如記憶體最佳化與敏感度控制。

進階使用情境

  • 資料庫 BLOB 比較: 從 SQL Server 取得 Excel BLOB,包裝成 MemoryStream,直接傳給比較器——不需要暫存檔。
  • 雲端儲存整合: 使用 Azure Blob Storage SDK 取得 BlobStream 並傳給比較器,實現完整無伺服器的工作流程。
  • 即時 API 端點: 提供接受兩個 multipart/form‑data 檔案的 POST 端點,即時比較並以可下載的串流返回差異。

結論

透過利用 GroupDocs.Comparison 的基於串流 API,您可獲得 記憶體效能佳安全、且 可擴充 的 C# XLSX 檔案比較方式。本指南涵蓋從設定到進階雲端情境的全部內容,為您在任何 .NET 解決方案中整合試算表比較奠定堅實基礎。

常見問答

Q: GroupDocs.Comparison for .NET 是否相容所有 Excel 格式?
A: 是,它支援超過 20 種與 Excel 相關的格式,包括 .xls、.xlsx、.xlsm 與 .csv,確保在舊版與新版活頁簿間都有廣泛相容性。

Q: 我可以自訂比較結果的視覺樣式嗎?
A: 當然可以。API 允許您設定突顯顏色、變更邊框樣式,並透過 ComparisonOptions 調整變更敏感度等級。

Q: 生產環境需要商業授權嗎?
A: 任何商業部署皆需有效的 GroupDocs.Comparison 授權。您可於 此處 取得授權。

Q: 有提供免費試用嗎?
A: 有,您可從 此處 下載完整功能的試用版,以在購買前評估所有功能。

Q: 我可以在哪裡取得社群支援?
A: GroupDocs.Comparison 論壇 此處 是一個活躍的地方,可向其他開發者提問與分享解決方案。


最後更新: 2026-06-21
測試環境: GroupDocs.Comparison 23.10 for .NET
作者: GroupDocs

using System;
using System.IO;
string outputDirectory = "Your Document Directory";
string outputFileName = Path.Combine(outputDirectory, "result.xlsx");
using (Comparer comparer = new Comparer(File.OpenRead("source.xlsx")))
comparer.Add(File.OpenRead("target.xlsx"));
comparer.Compare(File.Create(outputFileName));
Console.WriteLine($"\nDocuments compared successfully.\nCheck output in {outputDirectory}.");

相關教學