在python中打印excel单元格值时出错
我是python新手。最近我尝试在Windows7中使用openpyxl处理excel文件。我试图在excel文件“Sample.xlsx”中打印每个单元格的值。这是我的密码:在python中打印excel单元格值时出错,python,excel,openpyxl,Python,Excel,Openpyxl,我是python新手。最近我尝试在Windows7中使用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:
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行,在
单元格=工作表。单元格(行=行,列=列)
文件“C:\Python34\lib\site packages\openpyxl\worksheet\worksheet.py”,第306行,在单元格中
如果行<1或列<1:
TypeError:无序类型:tuple()我不能理解这个错误。任何人请解释我做错了什么。尝试用
工作表替换工作表。行
。iter\u行(最小行,最大行)
并用工作表替换工作表。列
。iter\u列(最小列,最大列)
其中最小和最大列是循环范围。我认为worksheet.rows
给出了一个元组,您不能将其用于for
循环iter\u rows()
和iter\u cols()
返回生成器,因此它应该可以工作。工作表。cell
的行和列的参数需要基于1的索引,但您同时传递一个元组(工作表.行和工作表.列
每个都返回一个元组)
您几乎没有选择:
利用workbook.rows
逐行迭代工作表并为每行返回一个单元格元组这一事实。这样还可以节省对工作表单元格的调用:
for row in worksheet.rows:
for cell in row:
print(cell.value)
相同,但按列排列:
worksheet = workbook.active
for column in worksheet.columns:
for cell in column:
print(cell.value)
使用max_row
和max_column
获取此工作表中使用的max row和max column的索引(基于1),然后使用range
对其进行迭代(同时请记住range
默认为零基且互斥:
for row in range(1, worksheet.max_row + 1):
for col in range(1, worksheet.max_column + 1):
cell = worksheet.cell(row = row, column = col)
print(cell.value)
使用worksheet.get\u cell\u collection
获取包含所有已使用单元格的iterable,从而省去了显式调用worksheet.cell
的需要。
这种方法的问题是返回的iterable的顺序是任意的:
for cell in worksheet.get_cell_collection():
print(cell.value)
我尝试了各种方法在excel工作表中打印单元格的值。以下是我尝试的代码:
import openpyxl
workbook = openpyxl.load_workbook('Sample.xlsx')
worksheet = workbook.active
for row in range(1,worksheet.max_row+1):
for col in range(1,worksheet.max_column+1):
print(worksheet.cell(row=row, column=col).value)
import openpyxl
workbook = openpyxl.load_workbook('Sample.xlsx')
worksheet = workbook.active
for row in worksheet.rows:
for cell in row:
print(cell.value)
import openpyxl
workbook = openpyxl.load_workbook('Sample.xlsx')
worksheet = workbook.active
for row in worksheet.iter_rows(worksheet.min_row, worksheet.max_row):
for cell in row:
print(cell.value)
你认为你创建的循环中有什么行
和列
呢?我使用行和列迭代工作表的每一行和每一列。外部循环指的是工作表的每一行,内部循环指的是工作表的每一列。那么,为什么你认为可以将它们传递到单元格
方法中呢?我误解了d工作表.rows和工作表.columns的真正含义。现在我了解了如何使用工作表。行
和工作表。列
是各自生成器的包装。工作表.iter_rows()和工作表.iter_cols()也可以在没有参数的情况下工作。默认情况下,它们将worksheet.min_row/worksheet.min_column和worksheet.max_row/worksheet.max_column作为参数。非常感谢您的深入空间。我在发布问题后使用了您的选项2。现在我可以打印每个单元格的值了。