我对openpyxl和python完全陌生,我在解决此问题上遇到了困难,需要您的帮助。
JAN FEB MAR MAR YTD 2019 YTD
25 9 57 23 7
61 41 29 5 57
54 34 58 10 7
13 13 63 26 45
31 71 40 40 40
24 38 63 63 47
31 50 43 2 61
68 33 13 9 63
28 1 30 39 71
我有一个包含上述数据的Excel报告。我想搜索包含特定字符串(即YTD)的单元格,并获取YTD列的列号。我想使用列号为该列提取数据。我不想使用行和单元格引用,因为excel文件会定期更新,因此d列将始终移动。
def t_PM(ff_sheet1,start_row):
wb = openpyxl.load_workbook(filename='report') # open report
report_sheet1 = wb.get_sheet_by_name('sheet 1')
col = -1
for j, keyword in enumerate(report_sheet1.values(0)):
if keyword=='YTD':
col = j
break
ff_sheet1.cell(row=insert_col + start_row, column= header['YTD_OT'], value=report_sheet1.cell(row=i + 7, column=col).value)
但是,我收到一个“'发电机'对象不可调用”错误。我该如何解决?
答案 0 :(得分:1)
您的问题是report_sheet1.values
是生成器,因此您不能用(0)
调用它。我假设您的代码不希望“ YTD”出现在第一行,因此您可以迭代所有单元格。通过以下方式进行操作:
def find_YTD():
wb = openpyxl.load_workbook(filename='report') # open report
report_sheet1 = wb.get_sheet_by_name('sheet 1')
for col in report_sheet1.iter_cols(values_only=True):
for value in col:
if isinstance(value, str) and 'YTD' in value:
return col
如果您正在假设此数据位于第一行,只需执行以下操作:
for cell in report_sheet1[1]:
if isinstance(value, str) and 'YTD' in cell.value:
return cell.column
openpyxl
使用基于“ 1”的行索引阅读文档-access many cells