【问题标题】:Excel removes a formula set by Pandas, but setting the formula manually makes the formula workExcel 删除了 Pandas 设置的公式,但手动设置公式会使公式生效
【发布时间】:2021-06-07 07:18:03
【问题描述】:

查看this post后发现没有回复我打开了这个。

我正在尝试通过 Python 中的 Pandas 在 Excel 单元格中设置公式。到目前为止,它通过将公式指定为文本来工作,但使用新公式时我遇到了问题:

=FILTER(SHEET1!A2:I456,(IF(SHEET2!D9=0,SHEET1!D2:D456>SHEET2!D9,SHEET1!D2:D456>=SHEET2!D9)),"No data")

(在python代码中,空分支的“指定为\”)

如果我在代码执行后打开 Excel 文件,Excel 会抱怨有问题,我必须接受“恢复”,显示公式已被删除,单元格显示 0。

之后,如果我在同一个单元格中手动输入相同的公式(用“而不是\”),它会起作用并显示信息。

我尝试使用 $ ($A$2) 指定单元格但没有成功...我还检查了 Excel 选项,并且公式设置为在“自动”中进行评估。

有什么问题?

问候。

【问题讨论】:

  • 如果您使用“更简单”的公式会发生什么?也许像 =SHEET2!D9=0
  • @norie 它工作并显示 TRUE。也许它与 FILTER 公式的工作原理有关?
  • 如果您尝试使用更简单的 FILTER 示例会发生什么?可能是 =FILTER(A1:A2, A1:A2="A") 之类的东西。
  • @norie 我一使用 FILTER 功能,打开文件后 Excel 就会报错。
  • 现在没有时间进行调查,但请查看 xlsxwriter.readthedocs.io/bugs.html 在标题“公式显示为#NAME?...”下。

标签: python excel pandas excel-formula


【解决方案1】:

经过更多研究,我发现了问题所在。我正在使用 OFFICE 365,以防它可能会影响此答案。

让我抓狂的是 Excel 中的手写公式可以正常工作。我有一个解决方法,包括将公式的内容作为不带 = 符号的文本放置,以便 Excel 不会将其解释为公式。打开 Excel,转到该单元格,手动输入 =,当我​​按 Enter 时,显示数据。

由于我在西班牙语中使用 EXCEL,但对于 Pandas,您必须用英文表示法编写所有内容,我想当我手动输入 = 并且公式有效时,我会看到 Excel 在内部做了什么。我所做的是:

  • 将文件扩展名从.xlsx更改为.zip
  • 打开 zip 并转到路径:xl/worksheets/sheet[number].xml
  • 查找公式字段,查找<f></f>

那时我注意到内容,而不是开头:

FILTER(....)

我找到了:

_xlfn._xlws.FILTER(....)

所以在我更改的 PANDAS 代码中:

cell_formula = f"=FILTER(...)"

作者:

cell_formula = f"=_xlfn._xlws.FILTER(...)"

然后:

workbook = pandas_writer.book
worksheet = workbook.sheetnames[sheet_name]
worksheet.write_array_formula("A2:Y109", "{" + cell_formula + "}")
workbook.close()

现在,当我打开 Excel 时,我没有收到错误,公式显示了结果。然后,在XlsxWriter documentation这部分看,在Microsoft documentation这个功能没有出现。

因此,如果您遇到这种情况,请手动修复函数,保存更改并检查 EXCEL 生成的内部 XML。

【讨论】:

  • 此函数与其他 Excel/XlsxWriter 函数(包括 Future Functions)不同的原因在于它是新的动态数组函数之一。我需要更新有关这些的 XlsxWriter 文档,并且可能还添加新的方法来处理它们。
猜你喜欢
  • 2011-12-06
  • 2023-04-07
  • 2019-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-07
  • 1970-01-01
相关资源
最近更新 更多