使用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
相关产品推荐
相关产品推荐

