xlsxwriter python = AVERAGE不起作用

时间:2018-08-08 09:05:43

标签: python excel libreoffice

我正在使用python的xlsxwriter模块将一些模拟结果写入excel文件。编写结果似乎运行良好。但是我还需要计算“模拟平均值”,可以通过= AVERAGE(CELL:CELL)完成。
不幸的是,尽管公式实际上在工作表中显示为“ = AVERAGE(A2:A10001)”,但这似乎不起作用,但是该值只是设置为0。如果我现在将包含公式的该单元格复制并粘贴到另一个单元格,它将被执行。
有谁知道xlsxwriter如何自动执行此操作,而不仅仅是将公式写入单元格中?

for x in range(0, len(exploit_names)):
    worksheet.write(amount_of_runs+1, x , '=AVERAGE(' + chr(65 + x) + '2:' + chr(65 + x)+str(amount_of_runs + 1) + ')')

解决方案

worksheet.write_formula(amount_of_runs + 1, x,
                        '=AVERAGE(' + chr(65 + x) + '2:' + chr(65 + x) + str(amount_of_runs + 1) + ')',
                        cell_format1, "#DIV/0!")

这立即执行了公式,并为我提供了单元格的正确值。可以在@jmcnamara在其评论中发布的Issue Page上找到更多解决方法。

1 个答案:

答案 0 :(得分:2)

  

有人知道xlsxwriter如何自动执行此操作,而不仅仅是将公式写入单元格中?

从XlsxWriter FAQ/Known Issues

公式结果在非Excel应用程序中显示为零

由于各种可能的公式以及它们之间的相互依赖性,因此XlsxWriter不会(实际上无法计算)将公式的结果写入XLSX文件时。而是将值0存储为公式结果。然后,它会在XLSX文件中设置一个全局标志,说打开该文件时应重新计算所有公式和函数。

这是Excel文档中推荐的方法,通常,它可以与电子表格应用程序正常工作。但是,不具备计算公式功能的应用程序(例如Excel Viewer)或多个移动应用程序将仅显示0结果。

有关更多详细信息和解决方法,请参见Formula Results