XlsxWriter用write_formula写公式自动带@前缀致失效如何解决
问题原因
- 公式前多余的
@是Excel的隐式交集运算符,是Excel打开文件时自动添加的,不是XlsxWriter写入时主动拼接的。 - 触发这个问题的核心原因是:你写入公式时使用了西班牙语本地化函数名
SI,但XlsxWriter的公式解析模块只识别美式英语的标准函数名(对应SI的标准函数是IF),无法正确识别你写的公式结构,就会默认把它标记为动态数组兼容格式存储,Excel打开识别到这类未被XlsxWriter正确解析的公式时,会自动做格式修正:一方面把参数分隔符从逗号改成分号,另一方面给函数前加上@前缀,最终就出现了你看到的错误公式格式。
解决方案
- 优先用标准英文函数名写公式,兼容性最好。把公式里的
SI替换为标准函数名IF,参数保留英文逗号分隔即可。XlsxWriter会正确识别这类标准公式的结构,按普通公式格式存储,Excel打开时不会自动添加@前缀,而且会根据你本地Office的语言设置自动把函数名显示为对应本地化语言(西语环境下打开会自动显示为SI,不需要手动修改)。
修改后的代码示例:for i in range(2, len(CODIGO_AGRUPADOR['marca'])+2): worksheet.write_formula(f'G{i}', f'=IF(F{i} ="","FALTA CONTROLAR","REVISADO")') - 如果你必须直接写入西语本地化函数名,不想使用英文标准函数名,可以在初始化Workbook对象时关闭未来函数(动态数组兼容)写入特性,让XlsxWriter把所有公式按传统普通公式格式存储,Excel打开时就不会自动添加
@前缀。
对应初始化代码示例:
注意这个方案兼容性较差,在不同语言版本的Excel上打开可能出现函数识别错误,优先推荐第一种方案。# 关闭未来函数兼容特性 workbook = xlsxwriter.Workbook('你的输出文件.xlsx', {'use_future_functions': False})
内容的提问来源于stack exchange,提问作者Maximiliano Vazquez
相关产品推荐
相关产品推荐

