跳轉到內容

LibreOffice/Calc/Excel 相容性和問題

來自華夏公益教科書,開放的書籍,開放的世界

LibreOffice Calc 無法正常處理 Microsoft Excel 的 xlsm 檔案。

---

LibreOffice Calc 和 Microsoft Excel 通常計算出略微不同的結果。

期望 (通常是不可見的) Calc 和 Excel 結果之間的偏差,因為它們
- 對輸入值應用不同的舍入方法,

  '=1234567890123456 - 1234567890000000' stays that in Calc and is calculated to '123456', while Excel changes the input to 
  '=1234567890123450 - 1234567890000000' and calculates '123450' as result.  

- 對結果應用不同的舍入 / '快照為零' 方法,

  '=2000000000000000+5,1' in Excel: '2000000000000000', in Calc: '2000000000000005'

- 按不同的順序計算工作表 / 範圍 / 運算元
而 Excel 首先按 '行' 順序,從左到右計算第一行,然後逐行向下計算。
Calc (大多是?) 按 '列' 順序操作。

由於一些操作的結果有時取決於運算元的順序,因此會出現差異。
(‘浮點數學’ 和 ‘學校數學’ 之間存在差異! 具有有限精度的 fp-數學不! 結合)
例如,此堆疊的總和在 Calc 中將是正確的 (0,52),但在 Excel 中是錯誤的 (0,51953125)

             0,52
-8796093022207,00
 8796093022207,00
 

而結果相反 (Calc 錯誤) 對於以下情況

-8796093022207,00
 8796093022207,00
             0,52
 

[編輯 2023-09-25] 一段時間前,LO Calc 實施了另一種求和演算法 (Kahan / Neumaier / AVX) 並避免了上述一些問題,請注意,現在

'=(0.52 + 8796093022207 - 8796093022207)' -> 0.51953125 
has different result than 
'=SUM(0.52,8796093022207,-8796093022207)' -> 0.52 
 

[/編輯]

Calc 的結果仍然會因其他影響而發生變化,例如,對於 'SUM',第一個 '非零' 被加數被保留並在最後計算,以確定一個小的結果是否應該為零的可能性。這可能因函式而異,並受到運算元堆疊中空單元格的區域性影響 / 影響。因此,即使在 Calc 本身中,也期望不可預測的 '模糊' 結果。

偏差大多要小得多,並且不會被注意到,因為結果被舍入到 15 位數字以進行顯示,但單元格的 '值' 不會相應地進行校正,並且偏差可能會導致下游計算中出現增強的錯誤。它們不僅會影響上面示例中選擇的極端值,還會影響正常的 '日常' 計算。經典示例是 '=1234 + 0,12 - 1234',結果為 '0,1199999999999xx',顯示至少 13 位十進位制數字。根據運算元的順序,Calc 和 Excel 失敗的方式不同。

(比較 LibreOffice Calc 開發版 7.2 / Microsoft Excel 2010 64 位)

[bs - 2021-03-12,編輯於 2021-04-28]

華夏公益教科書