xlsxwriter和LibreOffice没有显示公式的结果

Luc*_*Luc 10 python xlsx xlsxwriter libreoffice-calc

我正在尝试使用简单的公式创建一个Excel文件:

import xlsxwriter
workbook = xlsxwriter.Workbook('testxlsx.xlsx', {'strings_to_numbers': True})
ws = workbook.add_worksheet()

ws.write('A2', 'Number one')
ws.write('B2', '1')
ws.write('A3', 'Number two')
ws.write('B3', "1000")
ws.write('A4', "Number three")
ws.write('B4', "1050")
ws.write('A5', "Number four")
ws.write('B5', "3")
ws.write('A6', "Result")
ws.write('B6', '=IF(B5=3,ROUND(100-(B3/B4*100),1),ROUND(100-(B3/(B4*1.502)*100),1))')

workbook.close()
Run Code Online (Sandbox Code Playgroud)

生成的文件在Excel中完美运行,但在LibreOffice Calc中打开时,不会计算公式.我需要重新输入数值,然后才能工作.

我究竟做错了什么?

DSM*_*DSM 18

来自xlsxwriter 文档:

XlsxWriter不计算公式的结果,而是将值0存储为公式结果.然后,它在XLSX文件中设置一个全局标志,表示在打开文件时应重新计算所有公式和函数.这是Excel文档中推荐的方法,通常它适用于电子表格应用程序.但是,没有计算公式的工具的应用程序(如Excel Viewer)或某些移动应用程序将仅显示0结果.

至于为什么重新计算不会自动发生,来自ask.libreoffice.org的答案:

LibreOffice故意不重新计算旧的电子表格,因为公式从版本更新到版本或在不同的电子表格程序之间更新,结果可能会有所不同.转到工具 - 选项 - LibreOffice Calc,在"重新计算文件加载"下,将两个下拉菜单"Excel 2007及更新版本"和"ODF电子表格(未由LibreOffice保存)"更改为"始终重新计算".单击"确定",关闭电子表格和LibreOffice.现在在LibreOffice中打开文件,您应该看到公式已重新计算.

还可以转到"工具" - "单元格内容",并确保选中"自动计算".

我已经确认设置"总是重新计算"或"提示"对我有效.或者,你总是可以点击control-shift-F9.

  • 只是为了扩展答案:在同一个 `xlsxwriter`-link 中,它还提到我们可以将公式的计算结果(如果有的话)作为 `.write()` 的第 5 个参数并将其存储在工作表中. (2认同)

Rob*_*bin 5

来自xlsxwriter 网站的常见问题解答

\n
\n

注意:默认情况下,LibreOffice 不会重新计算引用其他单元格的 Excel 公式,在这种情况下,您将获得默认的 XlsxWriter 值 0。您可以通过设置 \xe2\x80\x9cLibreOffice 首选项 -> 来解决此问题LibreOffice Calc -> 公式 -> 文件加载时重新计算\xe2\x80\x9d 选项为 \xe2\x80\x9c 始终重新计算\xe2\x80\x9d(请参阅 LibreOffice 文档)。或者,您可以在公式中设置空白结果,这也会强制重新计算:

\n
\n
worksheet.write_formula(\'A1\', \'=Sheet1!$A$1\', None, \'\')\n
Run Code Online (Sandbox Code Playgroud)\n

我刚刚测试了这个,它确实有效。

\n