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

使用Openpyxl向Excel插入数组公式失败的问题求助

问题原因及解决方案

问题原因

  1. 引号混用与转义错误:你公式里同时使用了中文单引号(‘’)和英文单引号('),还错误地在Python原始字符串里加了\’转义——Python原始字符串(r'')中的单引号无需转义,这种混用会导致Openpyxl无法正确解析公式。
  2. 数组公式赋值方式错误:Openpyxl中普通公式可直接赋值给单元格,但数组公式必须通过array_formula属性设置,直接赋值的话Excel无法识别为数组公式。
  3. 公式语法缺陷:原IF函数缺少第三个必填参数(IF函数语法为IF(条件, 真值, [假值])),末尾还多了一个多余逗号,这会直接导致Excel公式报错。

修正后的解决方案

1. 修正公式语法与引号

统一使用英文单引号,补全IF函数参数,修正后的公式如下:

=IF(AND(LEFT('drive'!B2,4)="Gig ",OR(MID('drive'!B2,6,3)="500",MID('drive'!B2,6,3)="800",MID('drive'!B2,6,4)="1000")),MEDIAN(IF('drive'!$B$2:$B$136='drive'!B2,'drive'!$C$2:$C$136)),"")

2. 用Openpyxl正确设置数组公式

不要直接赋值给单元格,改用单元格的array_formula属性:

from openpyxl import Workbook

wb = Workbook()
ws = wb.active  # 替换为你要设置公式的目标工作表

# 用三重引号包裹公式,避免转义麻烦
formula = '''=IF(AND(LEFT('drive'!B2,4)="Gig ",OR(MID('drive'!B2,6,3)="500",MID('drive'!B2,6,3)="800",MID('drive'!B2,6,4)="1000")),MEDIAN(IF('drive'!$B$2:$B$136='drive'!B2,'drive'!$C$2:$C$136)),"")'''
ws.cell(row=11, column=4).array_formula = formula

wb.save("automated_excel.xlsx")

3. 更简便的替代方案

如果你的Excel版本支持动态数组(Excel 365/2021+),可以用MEDIANIFS替代数组公式,无需特殊设置:

=IF(AND(LEFT('drive'!B2,4)="Gig ",OR(MID('drive'!B2,6,3)="500",MID('drive'!B2,6,3)="800",MID('drive'!B2,6,4)="1000")),MEDIANIFS('drive'!$C$2:$C$136,'drive'!$B$2:$B$136,'drive'!B2),"")

直接用普通赋值方式即可:

ws['D11'] = '''=IF(AND(LEFT('drive'!B2,4)="Gig ",OR(MID('drive'!B2,6,3)="500",MID('drive'!B2,6,3)="800",MID('drive'!B2,6,4)="1000")),MEDIANIFS('drive'!$C$2:$C$136,'drive'!$B$2:$B$136,'drive'!B2),"")'''

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 20:41:10