You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用openpyxl添加第三方Excel插件函数时自动出现@符号的解决方法

解决openpyxl插入第三方Excel插件函数自动添加@符号的问题

问题描述

使用openpyxl库向Excel文件插入第三方插件函数WI.COMPANY_FINANCIAL_STATEMENT时,生成的公式被自动添加@符号(如=@WI.COMPANY_FINANCIAL_STATEMENT("AAA")),导致函数失效。尝试添加_xlfn.前缀后仍带有@,调用工作表的formula_attributes时因属性归属错误报错。

解决方案

方案一:将第三方函数加入openpyxl内置公式列表

openpyxl会对未识别的公式自动添加@(隐式交集运算符),将自定义函数加入FORMULAE集合后,openpyxl会将其视为内置公式,避免自动添加@。

修改后的代码:

from openpyxl import load_workbook
from openpyxl.utils import FORMULAE

# 注册第三方函数到openpyxl内置公式列表
FORMULAE.add("WI.COMPANY_FINANCIAL_STATEMENT")

# 加载工作簿,保留公式而非计算结果(data_only默认False,可明确写出)
wb = load_workbook("Book4.xlsx", data_only=False)
ws = wb.active

for i in range(len(df['ticker'])):
    ticker = df["ticker"][i]
    formula = f'=WI.COMPANY_FINANCIAL_STATEMENT("{ticker}")'
    ws[f'A${2*i + 1}'].value = formula

wb.save('Book4.xlsx')

方案二:使用_xlfn前缀+设置单元格为数组公式

若方案一无效,可通过_xlfn.前缀标识第三方函数,同时将单元格设置为数组公式,规避隐式交集的@符号。注意formula_attributes是单元格对象的属性,而非工作表的。

修改后的代码:

from openpyxl import load_workbook

wb = load_workbook("Book4.xlsx", data_only=False)
ws = wb.active

for i in range(len(df['ticker'])):
    ticker = df["ticker"][i]
    # 添加_xlfn.前缀标记为Excel兼容第三方函数
    formula = f'=_xlfn.WI.COMPANY_FINANCIAL_STATEMENT("{ticker}")'
    cell = ws[f'A${2*i + 1}']
    cell.value = formula
    # 设置单元格为数组公式,避免自动添加@
    cell.formula_attributes = {'t': 'array', 'ref': cell.coordinate}

wb.save('Book4.xlsx')

注意事项

  • 确保Excel已正确安装并启用WI插件,否则公式无法正常执行。
  • 若使用数组公式方案,部分Excel版本可能需要按Ctrl+Shift+Enter确认,但通过openpyxl设置后无需手动操作。

内容的提问来源于stack exchange,提问作者Dank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 18:17:34