web-dev-qa-db-ja.com

ワークシート、行、列を反復処理する

特定の列のすべてのデータ(すべての行)をpythonを使用してopenpyxlを使用して印刷します。

_from openpyxl import load_workbook
workbook = load_workbook('----------/dataset.xlsx')
sheet = workbook.active  
for i in sheet:
   print(sheet.cell(row=i, column=2).value)
_

しかし、それは与える

行<1または列<1の場合:TypeError:順序付けできない型:Tuple()<int()

私は_row=i_で繰り返しているからです。 sheet.cell(row=4, column=2).valueを使用すると、セルの値を出力します。しかし、どのようにしてすべてのドキュメントを反復処理できますか?

編集1

一部の調査では、シート名を使用してデータを取得できることがわかっています。 _Sheet 1_は_.xlsx_ファイルに存在しますが、そのデータは印刷されません。このコードに問題はありますか?

_workbook = load_workbook('---------------/dataset.xlsx')
print(workbook.get_sheet_names())
worksheet =workbook.get_sheet_by_name('Sheet1')
c=2
for i in worksheet: 
    d = worksheet.cell(row=c, column=2)
    if(d.value is None):
        return
    else:
        print(d.value)
    c=c+1
_
8
Humty

OpenPyXLドキュメント を読んでください

worksheets内のすべてのworkbookの反復、たとえば:

for n, sheet in enumerate(wb.worksheets):
    print('Sheet Index:[{}], Title:{}'.format(n, sheet.title))

出力

Sheet Index:[0], Title: Sheet    
Sheet Index:[1], Title: Sheet1    
Sheet Index:[2], Title: Sheet2    

oneワークシートのすべてのrowsおよびcolumnsの繰り返し

worksheet = workbook.get_sheet_by_name('Sheet')

for row_cells in worksheet.iter_rows():
    for cell in row_cells:
       print('%s: cell.value=%s' % (cell, cell.value) )

出力

<Cell Sheet.A1>: cell.value=²234
<Cell Sheet.B1>: cell.value=12.5
<Cell Sheet.C1>: cell.value=C1
<Cell Sheet.D1>: cell.value=D1
<Cell Sheet.A2>: cell.value=1234
<Cell Sheet.B2>: cell.value=8.2
<Cell Sheet.C2>: cell.value=C2
<Cell Sheet.D2>: cell.value=D2  

すべてのcolumnsの反復onerow、たとえばrow==2

for row_cells in worksheet.iter_rows(min_row=2, max_row=2):
    for cell in row_cells:
        print('%s: cell.value=%s' % (cell, cell.value) )  

出力

<Cell Sheet.A2>: cell.value=1234  
<Cell Sheet.B2>: cell.value=8.2  
<Cell Sheet.C2>: cell.value=C2  
<Cell Sheet.D2>: cell.value=D2  

反復allrows、のみcolumn2

for col_cells in worksheet.iter_cols(min_col=2, max_col=2):
    for cell in col_cells:
        print('%s: cell.value=%s' % (cell, cell.value))

出力

<Cell Sheet.B1>: cell.value=12.5
<Cell Sheet.B2>: cell.value=8.2
<Cell Sheet.B3>: cell.value=9.8
<Cell Sheet.B4>: cell.value=10.1
<Cell Sheet.B5>: cell.value=7.7

Python:3.4.2でテスト済み-openpyxl:2.4.1-LibreOffice:4.3.3.2

13
stovfl

これを試して、

from openpyxl import load_workbook
workbook = load_workbook('----------/dataset.xlsx')
sheet = workbook.active
row_count = sheet.max_row
for i in range(row_count):
   print(sheet.cell(row=i, column=2).value)
1
Chanda Korat