使用openpyxl获取单个单元格的值

2024-05-19 02:50:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我原以为这是一项相当简单的任务,但结果比我想象的要复杂得多。尝试读取带有值表的简单excel电子表格,然后将对值执行计算并输出新的工作表

第一个问题是,人们推荐使用什么图书馆?熊猫?Openpyxl?目前正在使用openpyxl,并且正在努力获取单个单元格的值。下面是一些代码:

    collectionOrder = np.empty( [numRows,2], dtype='object')
numCountries = 0
for i in burndownData.iter_rows():
    elemnt = burndownData.cell(row=i,column=1)
    print("elemnt=",elemnt.value )
    if not( np.isnan(burndownData.cell(row=i,column=1).value)):
        collectionOrder[ int(burndownData.cell(row=i,column=1).value) ][0] = burndownData.cell(row=i,column=1).value
        collectionOrder[ int(burndownData.cell(row=i,column=1).value) ][1] = i
        numCountries = numCountries + 1

但当我第一次尝试使用cell引用(burndownData.cell(row=I,column=1))时,我得到以下错误:

Exception has occurred: TypeError '<' not supported between instances of 'tuple' and 'int' 
File "C:\Users\cpeddie\Documents\projects\generateBurndownReport.py", line 59, in run elemnt = 
burndownData.cell(row=i,column=1) File 
"C:\Users\cpeddie\Documents\projects\generateBurndownReport.py", line 96, in <module>
run()

我在网上看到的一切都表明,这是获得单个细胞价值的方法。我做错了什么?有没有更简单的方法

谢谢


Tags: invaluenpnotcellcolumnusersfile
1条回答
网友
1楼 · 发布于 2024-05-19 02:50:11

除非您正在做的事情比收集一些单元格更复杂,numpypandas通常是不必要的开销openpyxl本身就可以很好地工作

您有两个迭代工作表的选项,但您试图将它们混合使用,因此会出现错误

一个选项是使用带有rowcolumn关键字参数的工作表对象的cell方法简单地查询每个单元格的值。rowcolumn索引是基于1的整数,如下所示:

burndownData.cell(row=1, column=1).value

另一个选项是迭代工作表并将行索引为列表:

for row in burndownData.iter_rows():
    elemnt = row[0].value

这将得到第1行的A列、第2行的A列,依此类推。(因为它是Python的索引list它是基于零的)

您在上面所做的:

for i in burndownData.iter_rows():
    elemnt = burndownData.cell(row=i,column=1)

生成错误,因为i是openpyxlCell对象的元组,并且cellrow参数需要一个整数

更新:我应该添加使用电子表格column:row语法引用单元格的第三种方法,如下所示:

burndownData['B9'].value

但除非你只选择几个特定的单元格,否则在字母和数字之间来回翻译似乎很笨拙

相关问题 更多 >

    热门问题