【问题标题】:Insert dynamic array formula in Excel sheet with openpyxl使用 openpyxl 在 Excel 工作表中插入动态数组公式
【发布时间】:2021-09-07 18:57:46
【问题描述】:

我正在使用 openpyxl 创建包含一些自定义 Excel 公式的工作表。其中一个自定义 Excel 公式返回一个数组,但我不提前知道数组的大小(即行数或列数)。

假设这是自定义 Excel 公式:

=GETVALUES(<some input>)

如果我在 Excel 365 中使用此公式,数组将根据需要根据GETVALUES 的返回维度动态调整大小。但是,如果我在 openpyxl 中设置公式(例如 ws["A1"].value = '=_xldudf_GETVALUES(<some input>)')然后在 Excel 365 中打开此工作簿,我会在等号后得到一个 @ 符号。

我看到this 文章建议将formula_attributes:将t 字段设置为array,并将ref 字段设置为单元格范围。由于我不知道返回数组的大小,我想我不会知道为ref 字段设置什么。

有没有办法在 openpyxl 中设置公式(不知道返回数组的大小),以便 Excel 365 动态显示整个数组?如果没有,是否有其他适用于 Python 的 Excel API 能够处理这个问题?

【问题讨论】:

  • 您不能依赖 Excel 中的 @ 符号来告诉您任何事情,除非发生了您无法在 GUI 中完全控制的特殊情况。 Openpyxl 3.1 包括对 Array 和 Table 公式的改进(和更改)支持,但我不知道这与这个特定公式有多相关。

标签: excel excel-formula openpyxl excel-365


【解决方案1】:

我遇到了类似的问题,我仍在寻找一个好的解决方案。

我找到的临时解决办法是在python中将公式写错,然后在excel中使用find和replace来修复公式。

所以如果你想把“=getvalues(text)”放到一个单元格中

改为“=keyword123(text)”。

然后打开excel文件,按Ctrl-h打开“查找和替换”窗口。

替换

关键字123

获取值

如果您仍然有@ 符号,请查找并将@ 替换为空。默认情况下,查找和替换当前活动工作表上的作品。您可以按选项将搜索扩展到整个工作簿。重要的是要确保“keyword123”是在 excel 文件的其他任何地方都找不到的值。

如果您要生成多个文件,显然这不是很有效,但如果所有内容都在一个工作簿中,则效果很好。

【讨论】:

    猜你喜欢
    • 2019-12-09
    • 2023-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 2015-11-18
    相关资源
    最近更新 更多