我有一个使用 OPENPYXL (v2.5.10) 库开发的 python 3.7 脚本,用于从多个 Excel 工作簿中获取数据,处理该数据,然后写入单独的 Excel 工作簿。结果工作簿包含大约 100 个命名范围和大量公式,所有这些都按预期工作,包括在 Excel 中打开工作簿时自动计算。
我在使用包含 AGGREGATE 函数的特定公式组时遇到问题。在这种情况下,公式将以正确的形式写入结果工作簿、正确的单元格。虽然其他公式在打开工作簿时显示结果值,但此公式序列仅在您选择单元格、将光标放在公式栏中(就像您正在编辑公式一样)然后按 Enter/Return 键时显示结果钥匙。未对公式进行任何更改或编辑。完成此操作后,公式将按预期工作。
我已经在最新的 macOS 和 Windows 版本的 excel 上对此进行了测试,并且得到了相同的行为。我应该补充一点,尝试“立即计算”、CtrlShiftAltF9 和“计算工作表”选项不会产生任何影响。该公式仅在您使用 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$4)/(_monthAgedDebt_ProjectNumbers=$L$4)*ROW(_monthAgedDebt_ProjectNumbers),1),6),"")
总结来说:
- 该代码可以正常工作,因为它将正确的公式以正确的形式写入正确的单元格
- 在 Excel 中,公式不会自动计算,只有在您编辑单元格中的公式、不进行任何更改并按 Enter/Return 退出编辑时才有效
AGGREGATE 生成数组结果是否有问题?我选择这种形式的公式主要是因为您不需要 CTL-SHIFT-ENTER 即可使其工作。如果将其直接输入到 Excel 的单元格中,则可以将其作为普通公式输入。
除此之外,我无法找到有关堆栈溢出的帮助one https://stackoverflow.com/questions/32590616/excel-is-not-updating-cells-options-formula-workbook-calculation-set-to-aut?rq=1。然而,这里提出的解决方案也不起作用。
This question https://stackoverflow.com/questions/56241939/excel-is-not-calculating-formulas?rq=1提出了类似的问题,但没有相关回应。
This question https://stackoverflow.com/questions/51287407/concat-concatenate-textjoin-all-return-name?rq=1可能有线索,但我似乎也无法做到这一点。
任何有关如何解决此问题的想法表示赞赏。我不确定这是 openpyxl 问题还是 excel 问题,也不知道还要测试什么。