ByteScope

Excel Compare

兩個 Excel 比較差異不用上傳:值改了、公式被換掉、型別不同,逐格標出來;列用鍵欄、自動或位置對齊,整個比對都在你的瀏覽器裡跑。

兩個活頁簿都在你自己電腦上的 worker 裡讀取、比對——不會上傳,儲存格內容、工作表名稱和檔名都不會送到任何地方。

A · 原始版

把活頁簿 A(原始版)拖到這裡

或點一下選檔——.xlsx 或 .xlsm

B · 修改版

把活頁簿 B(修改版)拖到這裡

或點一下選檔——.xlsx 或 .xlsm

比了什麼、沒比什麼

  • 比的是檔案裡存的結果,不會重新計算公式。用不會自動重算的軟體存的檔,結果可能是舊的。
  • 字型、顏色、框線、條件式格式、資料驗證、圖表、樞紐分析表、巨集和註解都不比。數值格式和合併儲存格範圍會比。
  • 自動對齊是推測,改得很多的表可能配錯列;結果上方會標出這次用的是哪種對齊。
  • 公式用相對位置來比,插入一列讓下面的參照跟著位移(C12*D12 變 C13*D13)不算變更;但加了 $ 的絕對參照如果位移了(例如 $D$9 變 $D$10),還是會列成公式變更。
  • 日期顯示成 YYYY-MM-DD;其他數值格式(小數位數、千分位、%)不會套用在這裡顯示的文字上。
  • 不支援舊版 .xls 檔和有密碼保護的活頁簿。

相關工具: CSV Explorer · Office Document Inspector · Word Compare

關於這個工具

同一份報表的「最終版」和「真的最終版」、同一本帳匯出兩次、同事改過再傳回來的表——你只想知道到底改了哪裡。把兩個 .xlsx 或 .xlsm 拖進來,就在頁面裡打開並比對:工作表先用名稱配對(名稱對不上就依順序配,也可以手動改配對),隱藏和深度隱藏的工作表照樣比。結果是左右並排的格線,每個差異都用顏色加圖示標出;每張工作表各有一份摘要——相同和不同的儲存格數、新增列、刪除列、公式變更數——還有「只看差異」的篩選和上一個/下一個差異的跳轉。差異清單可以匯出 CSV(sheet, cell, kind, a_value, b_value, a_formula, b_formula),或直接複製成 JSON。

兩個檔案都不會離開你的瀏覽器。帳本、薪資表、報價單正是你最不想放到別人伺服器上的東西,所以兩本活頁簿都是從你的磁碟讀進來,在你電腦上的 Web Worker 裡解開、比對。頁面根本沒有上傳端點,回報的只有「跑了一次比對、成功與否、用的是哪種對齊模式」——沒有檔名、沒有工作表名稱、沒有任何一格的值。

值、公式、型別分開標

每一對儲存格比三件事,各自有自己的標記。值,是檔案裡存的快取結果(共用字串已經解開)。公式,是 <f> 的文字,共用公式會先展開,所以每一格顯示的都是它實際帶的公式。型別,分數字、文字、布林、錯誤四種——文字的 100 和數字的 100 會被標成型別變更,不算相同。最值得注意的組合是「值沒變、公式卻不見或變了」:這就是有人把計算結果貼回去蓋掉公式的樣子,今天看起來一樣,明天就不會再更新。格線會把它標成「只有公式變更」,不會淹沒在幾千個相同的格子裡。數字用數值比(1.0 等於 1),也可以切成用顯示文字比,另外有一個預設為 0 的容差選項。日期在檔案裡其實是「帶日期格式的數字」,所以用序號比、顯示時換成日期;一格從純數字變成日期格式,會被標成數字格式變更,而不是值變更。

列對齊有三種方式

插入一列之後,後面每一列都被報成不同——這是試算表比對工具最常被罵的地方。所以對齊模式由你選,而且結果最上方一定寫明目前用的是哪一種。鍵欄(推薦):挑一欄或多欄當鍵,例如訂單編號、ID、料號,依鍵把列配起來,結果分成「兩邊都有但內容不同」「只在 A」「只在 B」「鍵重複」四類。自動:把每一列算成雜湊,對兩邊的列序列跑 Myers diff,先找出插入和刪除的列,再把配上的列逐格比。位置:第 N 列對第 N 列,適合版面固定的表單。欄用標題列(第一個非空列,或你指定的那一列)的文字配對,標題對不上的欄改依位置配。自動對齊是推測:大部分列都變過的表可能會配錯;它有 15 秒的時間預算和差異數上限,超過就停下來,建議你改用鍵欄或位置模式——不會默默退回位置對齊。

比什麼,不比什麼

比對用的是檔案裡存的快取值,不會重新計算。用手動計算存檔的活頁簿、標了「開啟時重算」的活頁簿、或是有公式卻沒有快取值的格子,數字可能是舊的;偵測到這些情況時頁面會提醒。兩個數字只要前 15 位有效數字一致就算相同——Excel 本身也只保留 15 位,而不同軟體存同一個值有的寫 15 位、有的寫 17 位,尾巴那幾位是雜訊,不是變更。字型、顏色、框線、條件式格式、資料驗證、圖表、樞紐分析表、巨集、註解都不比;格式這一層只標「數字格式不同」和「合併儲存格範圍不同」兩種。加密的活頁簿和舊版二進位 .xls 會拒絕並說明原因。

常見問題

比對時我的 Excel 檔會被上傳嗎?

不會。兩本活頁簿都從你的磁碟讀進來,在頁面裡的 Web Worker 解開、解析、比對。沒有伺服器在做事,關掉分頁之後兩個檔案都不會留下任何副本。匿名的使用事件只記「跑了一次比對、成功與否、用哪種對齊模式」。

我在中間插了一列,為什麼下面每一列沒有全部被報成變更?

因為比對之前會先把列對齊。自動模式把每一列算成雜湊,用 Myers diff 找出插入和刪除的列,所以插入點下面的列會配到它們真正的對應列。鍵欄模式用你挑的鍵來配對,更可靠。只有位置模式是第 N 列對第 N 列——版面固定的表單才用它,清單別用。

「只有公式變更」是什麼意思?

兩個檔案裡的快取值一樣,但公式不一樣——最常見的是一邊是 =SUM(B2:B9),另一邊是這條公式當初算出來的數字。表今天看起來沒差,明天就會悄悄停止更新,所以它有自己的標記,不會被歸進「沒變」。

兩個檔案都顯示 100 的格子,為什麼被標成不同?

通常是型別不一樣:一邊存的是文字 100,另一邊是數字 100;或者一邊是布林值,另一邊是文字 TRUE。在格線裡看起來一樣,加總和查找時卻是兩回事。想把它們當成相同,就打開「用顯示文字比較」。

兩個檔是不同軟體存的,幾乎每個數字都被標出差異,怎麼辦?

先看容差和 15 位規則:前 15 位有效數字一致的數字本來就算相同,不同軟體對同一個值在第 16、17 位產生的雜訊會被吸收掉。如果差異還是超過這個範圍,可能是其中一個檔案的快取值是舊的——活頁簿設成手動計算、標了「開啟時重算」、或有公式卻沒有快取結果時,頁面都會提醒。

自動對齊停下來叫我換模式,為什麼?

自動對齊是對列序列跑 Myers diff,成本隨差異數成長。兩張表差太多列,或是 15 秒的時間預算用完時,它會直接停下,而不是回傳一個猜的結果,也不會偷偷改成位置對齊。表裡有鍵欄就選鍵欄模式,又快又準;版面固定就選位置模式。

會比格式、圖表或巨集嗎?

不會。字型、填色、框線、條件式格式、資料驗證、圖表、樞紐分析表、註解、VBA 這一版都不比;格式差異只回報「數字格式變了」和「合併儲存格範圍變了」兩種。.xlsm 可以正常打開,只是巨集不在比對範圍內。

為什麼隱藏的工作表也算進去?

因為被改掉的假設往往就藏在隱藏工作表裡。標成隱藏或深度隱藏的工作表跟其他工作表一樣比對,隱藏旗標本身有沒有變也會回報——一張在這版看得到、在那版被收起來的工作表不會溜過去。