在python中打印excel单元格值时出错

时间:2016-11-27 07:53:29

标签: python excel openpyxl

我是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行,in       cell = worksheet.cell(row = row,column = col)     文件“C:\ Python34 \ lib \ site-packages \ openpyxl \ worksheet \ worksheet.py”,第306行,在单元格中       如果行< 1或列< 1:   TypeError:unorderable类型:tuple()< INT()

我无法理解错误。任何人都请解释我做错了什么。

3 个答案:

答案 0 :(得分:1)

worksheet.cell期望其rowcolumn参数的基于1的索引,但是你传递了一个元组(worksheet.rowsworksheet.columns,每个都返回一个元组(元组)。

你几乎没有选择:

  1. 利用workbook.rows逐行迭代工作表并返回每行的单元格元组的事实。这也可以节省您对worksheet.cell的调用:

    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)
    
  2. 使用max_rowmax_column获取此工作表中使用的最大行和列的索引(从1开始),然后使用{{1}进行迭代(同时请记住,默认情况下range是从零开始的并且是独占的:

    range
  3. 使用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_cell_collection的需要。
    这种方法的问题在于返回的可迭代的顺序是任意的

    worksheet.cell

答案 1 :(得分:0)

尝试将worksheet.rows替换为worksheet.iter_rows(min_row, max_row)并将worksheet.columns替换为worksheet.iter_cols(min_col, max_col),其中min和maxes是循环范围。我认为worksheet.rows正在给出一个元组,你不能将它用于for循环。 iter_rows()iter_cols()会返回生成器,因此它应该可以正常工作。

答案 2 :(得分:0)

我尝试了各种方法来打印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)