excel - 写入结果电子表格时,聚合公式不会自动计算
问题描述
我有一个使用 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),"")
总而言之:
- 该代码在将正确的公式以正确的形式写入正确的单元格时起作用
- 在 excel 中,公式不会自动计算,但只有在您编辑单元格中的公式、不进行任何更改并按 enter/return 退出编辑时才有效
AGGREGATE 产生数组结果是否存在问题?我选择这种形式的公式主要是因为您不需要 CTL-SHIFT-ENTER 来使其工作。如果您直接将其输入到excel中的单元格中,则可以将其作为普通公式输入。
除了这个之外,我无法找到有关堆栈溢出的帮助。但是,这里提出的解决方案也不起作用。
这个问题提出了类似的问题,但没有相关的回应。
这个问题可能有一个线索,但我似乎也无法做到这一点。
任何有关如何解决此问题的想法表示赞赏。我不确定这是 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 电子表格现在可以按预期工作,无需编辑包含公式的单元格。
推荐阅读
- javascript - 如何避免元标记在 php 中运行
- mysql - SQL 使用 COUNT(*) AS CountOf 插入选择
- node.js - 构建一次性密码认证服务器
- javascript - 有没有办法从表单中获取值数组
- python - 从连续元素之间的差异小于特定数字的列表创建嵌套列表
- python - 我想将数据框转换为特定格式的数据框或列表列表
- shutdown - 为什么从 wildfly-maven-plugin 启动的 wildfly 服务器没有关闭?
- android - 如何禁用模式锁定屏幕的通知和导航栏
- c# - 如何升级 azure CI 以使用 c# 8.0
- angular - 组件后读取的类