回答问题

我正在尝试使用一个简单的公式创建一个 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()

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

我究竟做错了什么?

Answers

来自 xlsxwriter文档:

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

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

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

还可以转到工具 - 单元格内容并确保选择了自动计算。

我已经确认设置“总是重新计算”或“提示”对我有用。或者,您可以随时按 control-shift-F9。

Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐