【发布时间】:2021-09-08 15:13:48
【问题描述】:
我正在尝试为学员自动进行测验评分。我们遵循的步骤如下:
- 从 ODKaggregate 服务器中提取测验数据作为 CSV 文件并以 xlsx 格式保存
- 在python中加载数据(我用的是Pycharm IDE)
- 为测验中的每个问题创建一个新工作表
- 自动计算 xlsx 表单内每个问题的平均分数
我成功完成了步骤 1-3。为了自动计算每张纸的平均分数,我使用了 AVERAGE、OFFSET 和 INDIRECT excel 函数。但是,我不能在 INDIRECT 函数内的另一张表中引用单元格坐标,它返回 SyntaxError: invalid syntax 。以下是我尝试过的代码行:
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 = wb.active.max_row - 1 # the '-1' is to ignore the column heading'
for i in range(max_row+1):
wb.create_sheet('Q')
wb['Q1']['B2'] = "=AVERAGE(OFFSET(INDIRECT("'Sheet1'!AC1",1,0,1,3))" # i am getting the error from this line of code.
谁能帮我解决这个问题,拜托。非常感谢您的帮助!
【问题讨论】:
-
请包含完整的回溯。
-
你试图把“放在一个“-quoted字符串中,这会产生语法错误——你需要转义内部的“like \”,而且我认为你在结束 - 即 "=AVERAGE(OFFSET(INDIRECT(\"'Sheet1'!AC1\",1,0,1,3)))"
-
其实你可能根本不需要那些内部的\”,不用试试。
-
非常感谢@balmy,转义内部“with \”解决了问题。我应该编辑代码以使其工作:
"=AVERAGE(OFFSET(INDIRECT(\"'Sheet1'!\"& \"AC1\"),1,0,1,3)). -
我有一个后续问题:我想将一个包含单元格坐标的字符串变量传递给函数,但在输出 excel 上我收到
#REF!错误。该示例将如下所示:"=AVERAGE(OFFSET(INDIRECT(\"'Sheet1'!\"& \"cell_coordinate\"),1,0,1,3))"。 “cell _coordinate”是一个值为AC1的字符串。
标签: python excel pandas formula openpyxl