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

OpenPyXL生成Excel时SUM公式自动添加@符号问题求助

问题原因与解决方案

原因分析

Excel的动态数组功能会自动给涉及区域间运算的公式添加@(隐式交集运算符)。公式SUM(A1:A9*B1:B9)本质是逐元素相乘后求和的数组运算,但在非数组公式模式下,Excel会通过@限制运算仅作用于当前行,导致无法计算整个区域的乘积和,因此自动插入了该符号。

永久解决方案

1. 用openpyxl写入数组公式

通过array_formula属性标记公式为数组公式,Excel会正确识别并执行区域数组运算,不会添加@:

# 修改后的示例代码
import openpyxl

wb = openpyxl.Workbook()
ws = wb.active

for row in range(1, 10):
    ws[f'A{row}'] = row
    ws[f'B{row}'] = row

# 设置数组公式
ws['B10'].array_formula = '=SUM(A1:A9*B1:B9)'

wb.save('fixedSum.xlsx')

2. 改用SUMPRODUCT函数

SUMPRODUCT原生支持多区域乘积求和,无需数组公式,Excel不会添加@符号,写法更直观:

# 使用SUMPRODUCT的示例代码
import openpyxl

wb = openpyxl.Workbook()
ws = wb.active

for row in range(1, 10):
    ws[f'A{row}'] = row
    ws[f'B{row}'] = row

# SUMPRODUCT两种等价写法都可
ws['B10'] = '=SUMPRODUCT(A1:A9,B1:B9)'
# 或 ws['B10'] = '=SUMPRODUCT(A1:A9*B1:B9)'

wb.save('fixedSum.xlsx')

3. 禁用动态数组(不推荐)

若坚持使用SUM数组公式,可在Excel中禁用动态数组功能,但会影响其他依赖该功能的操作:

  • 打开Excel → 文件 → 选项 → 高级 → 取消勾选“启用动态数组公式”

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:45:51