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

openpyxl使用OFFSET、INDIRECT组合公式时如何引用其他工作表单元格

问题解决方法

错误原因分析

  • Excel公式括号嵌套错误:你把OFFSET函数的参数错误放到了INDIRECT函数的入参中,INDIRECT函数仅支持2个入参,额外传入的偏移参数会直接导致公式语法错误
  • 公式结构不完整:AVERAGE函数缺少闭合右括号
  • 工作表创建逻辑不合理:你按学员行数创建工作表,实际应该按题目数量创建对应题目工作表,且需要显式指定表名避免后续引用报错
  • 字符串转义存在隐患:原写法中转义符使用不当易引发Python语法报错

修正方案

方案1:保留Excel公式写法

修正后的代码如下:

import pandas as pd
import openpyxl
from openpyxl import load_workbook, Workbook

# 基础读写逻辑不变
quiz_excel=pd.read_csv(r'path_to_csv_file.csv')
quiz_excel.to_excel(r'path_to_xlsx_file.xlsx', index=None, header=True)
wb: Workbook = load_workbook(r'path_to_xlsx_file.xlsx')
sheet = wb['Sheet1']

# 这里按实际题目数量填写即可,不要用学员行数max_row
question_count = 20
for i in range(question_count):
    # 显式命名工作表为Q1、Q2...避免重名冲突
    wb.create_sheet(f'Q{i+1}')

# 修正公式写法:调整括号位置、闭合括号,用单引号包字符串避免内部双引号转义
# 示例公式逻辑为取Sheet1的AC列从第2行开始的3行数据求平均,可根据你的实际需求调整OFFSET参数
wb['Q1']['B2'] = '=AVERAGE(OFFSET(INDIRECT("Sheet1!AC1"),1,0,3,1))'

# 最后保存工作簿即可生效
wb.save(r'path_to_xlsx_file.xlsx')

方案2:直接用Python计算平均值(更稳定,无公式兼容问题)

不需要依赖Excel函数,直接在Python侧算完写入单元格,运行效率更高:

# 接上述基础读写逻辑,读取Sheet1的AC列得分数据,跳过表头从第2行开始取数
score_col = [cell.value for cell in sheet['AC'][1:]]
avg_score = sum(score_col)/len(score_col)
wb['Q1']['B2'] = avg_score

wb.save(r'path_to_xlsx_file.xlsx')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:27:03