2016-11-27 1 views
-1

저는 python을 처음 사용합니다. 최근에 나는 Windows 7에서 openpyxl을 사용하여 Excel 파일을 사용하여 작업하려고합니다. 'Sample.xlsx'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

그래서 왜 '셀'방식으로 전달할 수 있다고 생각합니까? –

답변

1

worksheet.cellrowcolumn 인수 1 기반의 인덱스를 기대하고 있지만, 튜플 (worksheet.rowsworksheet.columns 각 튜플의 튜플을 반환)을 모두 전달합니다.

  1. 하는 workbook.rows 반복 워크 시트의 행 방향은 각 행에 대한 세포의 튜플을 반환한다는 사실을 활용 :

    당신은 몇 가지 옵션이 있습니다. 같은

    for row in worksheet.rows: 
        for cell in row: 
         print(cell.value) 
    

    을하지만, 열이 많다는 : :이 또한 worksheet.cell 당신에게 전화를 저장

    worksheet = workbook.active 
    for column in worksheet.columns: 
        for cell in column: 
         print(cell.value) 
    
  2. 사용 max_rowmax_column 인덱스를 얻을 수있는 최대 행의 (1-기준) 이 시트에서 사용 된 열을 다음에 range으로 반복합니다 (기본값 인 range은 0부터 시작하여 독점적으로 0을 기점으로합니다).

    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.columnsworksheet.iter_cols(min_col, max_col)으로 바꾸어보십시오. 여기서 최소 및 최대는 루프 범위입니다. 나는 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

. 내가 시도한 코드는 다음과 같습니다.

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) 
관련 문제