我是python的新手 . 最近我试图在Windows 7中使用openpyxl处理excel文件 . 我试图在excel文件'Sample.xlsx'中打印每个单元格的值 . 这是我的代码:
import openpyxl
workbook = openpyxl.load_workbook('Sample.xlsx')
worksheet = workbook.active
for row in worksheet.rows:
for col in worksheet.columns:
cell = worksheet.cell(row = row, column = col)
print(cell.value)
当我运行脚本时,我有以下错误:
回溯(最近一次调用最后一次):文件“excel.py”,第6行,在cell = worksheet.cell(row = row,column = col)文件“C:\ Python34 \ lib \ site-packages \ openpyxl \ worksheet \ worksheet.py“,第306行,单元格如果行<1或列<1:TypeError:unorderable类型:tuple()<int()
我无法理解错误 . 任何人请解释我做错了什么 .
3 回答
worksheet.cell
期望其row
和column
参数的基于1的索引,但是你传递了一个元组(worksheet.rows
和worksheet.columns
各自返回一个元组元组) .你有几个选择:
workbook.rows
逐行迭代工作表并返回每行的单元格元组这一事实 . 这也可以保存您对worksheet.cell
的调用:同样但是按列:
max_row
和max_column
获取此工作表中使用的最大行和列的索引(从1开始),然后使用range
迭代它们(同时请记住range
默认情况下是从零开始的并且是独占的:worksheet.get_cell_collection
获取所有已使用单元格的可迭代,从而节省了显式调用worksheet.cell
的需要 .The problem with this approach is that the order of the returned iterable is arbitrary :
尝试用
worksheet.iter_rows(min_row, max_row)
替换worksheet.rows
并用worksheet.iter_cols(min_col, max_col)
替换worksheet.columns
,其中min和maxes是循环范围 . 我认为worksheet.rows
正在给出一个元组,你不能将它用于for
循环 .iter_rows()
和iter_cols()
返回生成器,因此它应该工作 .我已经尝试了各种方法来打印Excel工作表中的单元格值 . 这是我尝试的代码: