首页 文章

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

提问于
浏览
-1

我是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 回答

  • 1

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

    你有几个选择:

    • 利用 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)
    
    • 使用 max_rowmax_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_cell_collection 获取所有已使用单元格的可迭代,从而节省了显式调用 worksheet.cell 的需要 .
      The problem with this approach is that the order of the returned iterable is arbitrary
    for cell in worksheet.get_cell_collection():
       print(cell.value)
    
  • 0

    尝试用 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() 返回生成器,因此它应该工作 .

  • 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)
    

相关问题