2016-11-27 58 views
-1

我是python的新手。最近我嘗試在windows 7中使用openpyxl來處理excel文件。我試圖在excel文件'Sample.xlsx'中打印每個單元格的值。這裏是我的代碼:在python中打印excel單元格值時出錯

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

我無法理解的錯誤。任何人都請解釋我做錯了什麼。

+0

你認爲'row'和'col'是在你創建的循環中? –

+0

我使用行和列遍歷工作表的每一行和一列。外部循環用於表格的每一行,內部循環用於表格的每一列。 – balaji

+0

那麼,你爲什麼認爲你可以將它們傳遞給'cell'方法呢? –

回答

1

worksheet.cell預計1基於其rowcolumn參數指標,但你同時通過一個元組(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型)的最大行和列,然後用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可以獲得所有已使用單元的迭代,從而使您無需明確調用worksheet.cell
    這種方法的問題是,返回的迭代的順序是任意的

    for cell in worksheet.get_cell_collection(): 
        print(cell.value) 
    
+0

非常感謝DeepSpace。我在發佈問題後使用了您的選項2。現在我可以打印每個單元格的值。 – balaji

0

嘗試用worksheet.iter_rows(min_row, max_row)代替worksheet.rows並用worksheet.iter_cols(min_col, max_col)代替worksheet.columns其中min和max是環路範圍。我認爲worksheet.rows提供了一個元組,並且您不能將其用於for循環。 iter_rows()iter_cols()返回發電機,所以它應該工作。

+0

'worksheet.rows'和'worksheet.columns'是各自生成器的包裝。 –

+0

worksheet.iter_rows()和worksheet.iter_cols()也可以在沒有參數的情況下工作。默認情況下,他們採取工作表。min_row/worksheet.min_column和worksheet.max_row/worksheet.max_column作爲參數 – balaji

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)