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

2024-03-29 01:48:37 发布

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

我是python新手。最近我尝试在Windows7中使用openpyxl处理excel文件。我试图在excel文件中打印每个单元格的值'示例.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)

运行脚本时出现以下错误:

Traceback (most recent call last): File "excel.py", line 6, in cell = worksheet.cell(row = row, column = col) File "C:\Python34\lib\site-packages\openpyxl\worksheet\worksheet.py", line 306, in cell if row < 1 or column < 1: TypeError: unorderable types: tuple() < int()

我不能理解这个错误。有谁请解释一下我做错了什么。在


Tags: 文件inpyfor错误cellcolumncol
3条回答

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

worksheet.cellrowcolumn参数需要基于1的索引,但是您同时传递一个元组(worksheet.rows和{}每个都返回一个元组的元组)。在

你几乎没有选择:

  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),然后使用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)
    
  3. 使用worksheet.get_cell_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)

相关问题 更多 >