写入结果电子表格时,聚合公式不会自动计算

AGGREGATE formula not automatically calculating when written to results spreadsheet

我有一个 python 3.7 脚本,它是使用 OPENPYXL (v2.5.10) 库开发的,用于从多个 excel 工作簿中获取数据,处理该数据,然后写入到单独的 excel 工作簿。结果工作簿包含大约 100 个命名范围和大量公式,它们都按预期工作,包括在 excel.

中打开工作簿时自动计算

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

我已经在最新的 macOS 和 windows 版本的 excel 上对此进行了测试,我得到了相同的行为。我应该补充一点,尝试 'calculate now'、CtrlShiftAltF9 和 'calculate sheet' 选项没有任何影响。公式计算的唯一时间是使用 enter/return 键。

写公式的代码是:

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)/(_monthAgedDebt_ProjectNumbers=$L)*ROW(_monthAgedDebt_ProjectNumbers),1),6),"")

总而言之:

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

除此 外,我没能找到有关堆栈溢出的帮助。但是,此处提出的解决方案也不起作用。

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

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

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

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

事实证明,解决这个问题的关键在于 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 电子表格现在可以按预期工作,无需编辑包含公式的单元格。