首页 > 解决方案 > 写入结果电子表格时,聚合公式不会自动计算

问题描述

我有一个使用 OPENPYXL (v2.5.10) 库开发的 python 3.7 脚本,用于从许多 excel 工作簿中获取数据,处理该数据,然后写入单独的 excel 工作簿。结果工作簿包含大约 100 个命名范围和众多公式,所有这些都按预期工作,包括在 Excel 中打开工作簿时自动计算。

我在使用一个包含 AGGREGATE 函数的特定公式组时遇到问题。在这种情况下,公式会以正确的形式写入结果工作簿、正确的单元格。虽然其他公式在打开工作簿时显示结果值,但此公式序列仅在您选择单元格、将光标放在公式栏中(就像您正在编辑公式一样)然后按下回车键时才显示结果钥匙。不对公式进行任何更改或编辑。完成此操作后,公式将按预期工作。

我已经在最新的 macOS 和 windows 版本的 excel 上对此进行了测试,并且得到了相同的行为。我应该补充一点,尝试“立即计算”、CtrlShiftAltF9 和“计算工作表”选项没有任何影响。公式计算的唯一时间是您使用回车键。

编写公式的代码是:

activeSheet.cell(row, col).value = f"=IFERROR(INDEX({rngData}, AGGREGATE(15,3,({rng}={cellRef})/({rng}={cellRef})*ROW( {rng}),{nth}),{colIndex}),\"\")"

例如,它在 excel 工作簿单元格中给出了正确的结果:

=IFERROR(INDEX(_monthAgedDebt_Data, AGGREGATE(15,3,(_monthAgedDebt_ProjectNumbers=$L$4)/(_monthAgedDebt_ProjectNumbers=$L$4)*ROW(_monthAgedDebt_ProjectNumbers),1),6),"")

总而言之:

AGGREGATE 产生数组结果是否存在问题?我选择这种形式的公式主要是因为您不需要 CTL-SHIFT-ENTER 来使其工作。如果您直接将其输入到excel中的单元格中,则可以将其作为普通公式输入。

除了这个之外,我无法找到有关堆栈溢出的帮助。但是,这里提出的解决方案也不起作用。

这个问题提出了类似的问题,但没有相关的回应。

这个问题可能有一个线索,但我似乎也无法做到这一点。

任何有关如何解决此问题的想法表示赞赏。我不确定这是 openpyxl 问题还是 excel 问题,也不确定还有什么要测试的。

标签: excelpython-3.xopenpyxl

解决方案


全部 - 完整性的最终答案。

事实证明,解决这个问题的关键在于 OPENPYXL,并且查理克拉克在回答中提供的指导

问题

是正确的。我最初错误地应用了解决方案。

我将公式更改为:

activeSheet.cell(row, col).value = \ f"=IFERROR(INDEX({rngData}, _xlfn.AGGREGATE(15,3,({rng}={cellRef})/({rng}={cellRef}) *ROW({rng}),{nth}),{colIndex}),\"\")"

通过添加“_xlfn”。到 AGGREGATE 函数语句的前面。

excel 电子表格现在可以按预期工作,无需编辑包含公式的单元格。


推荐阅读