如何使用openpyxl在python中通过单元格值获取列号

如何使用openpyxl在python中通过单元格值获取列号,python,openpyxl,Python,Openpyxl,我对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

我对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_表1,起始行):
wb=openpyxl.load_工作簿(filename='report')#打开报告
报告表格1=wb。按表格名称(“表格1”)获取表格
col=-1
对于j,枚举中的关键字(report_sheet1.values(0)):
如果关键字=='YTD':
col=j
打破
ff_sheet1.单元格(行=插入列+开始列,列=标题['YTD_OT'],值=报告表1.单元格(行=i+7,列=列).value)

但是,我得到一个“'generator'对象不可调用”错误。如何解决此问题?

您的问题是
报告表1。值
是一个生成器,因此您不能用
(0)
调用它。我假设您的代码不希望依赖于“YTD”将出现在第一行,因此您迭代所有单元格。为此,请执行以下操作:

def find_YTD():
wb=openpyxl.load_工作簿(filename='report')#打开报告
报告表格1=wb。按表格名称(“表格1”)获取表格
对于报告表1.iter\u cols中的col(仅值=True):
对于col中的值:
如果isinstance(值,str)和值中的“YTD”:
返回列

如果假设此数据位于第一行,只需执行以下操作:

报告表1[1]中单元格的
:
如果单元格中的isinstance(值,str)和“YTD”:
返回单元格.column
  • openpyxl
    使用“基于1”的行索引

阅读文档-

使用Pandas会不会更容易?我看不到生成器对象?你能提供错误消息的堆栈跟踪吗?
report\u sheet1.values
是每个的生成器。请尝试:
对于j,枚举中的关键字(list(report\u sheet1.values)[0])
。我认为OP中的
(0)
表示期望“YTD”将始终显示在第一行。
ws.iter\u行(最小行=1,最大行=1)
@Charlie Clark这与执行
ws[1]相同。
您不说?;-)也适用于
iter\u cols()
,一般方法值得拼写。值得注意的是,问题建议使用列式访问,但实际上只是查看第一行。@Tomerikoo,谢谢,我尝试了代码,但根据这行代码“如果单元格中的'YTD',则值:”,得到了以下错误:“类型为'NoneType'的参数不可编辑”: