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.
\n\n注意:默认情况下,LibreOffice 不会重新计算引用其他单元格的 Excel 公式,在这种情况下,您将获得默认的 XlsxWriter 值 0。您可以通过设置 \xe2\x80\x9cLibreOffice 首选项 -> 来解决此问题LibreOffice Calc -> 公式 -> 文件加载时重新计算\xe2\x80\x9d 选项为 \xe2\x80\x9c 始终重新计算\xe2\x80\x9d(请参阅 LibreOffice 文档)。或者,您可以在公式中设置空白结果,这也会强制重新计算:
\n
worksheet.write_formula(\'A1\', \'=Sheet1!$A$1\', None, \'\')\n
Run Code Online (Sandbox Code Playgroud)\n我刚刚测试了这个,它确实有效。
\n 归档时间: |
|
查看次数: |
2488 次 |
最近记录: |