如何使用openpyxl在python中通过单元格值获取列号
我对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
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'的参数不可编辑”: