迭代工作表,行,列

Hum*_*mty 8 python openpyxl

我希望使用openpyxl这种方式打印python中特定列的所有数据(所有行);

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)
Run Code Online (Sandbox Code Playgroud)

但它给出了

如果row <1或列<1:TypeError:unorderable类型: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
Run Code Online (Sandbox Code Playgroud)

sto*_*vfl 13

阅读OpenPyXL文档

例如,对所有内容worksheets进行迭代workbook:

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

输出:

Sheet Index:[0], Title: Sheet    
Sheet Index:[1], Title: Sheet1    
Sheet Index:[2], Title: Sheet2    
Run Code Online (Sandbox Code Playgroud)

迭代所有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) )
Run Code Online (Sandbox Code Playgroud)

输出:

<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  
Run Code Online (Sandbox Code Playgroud)

迭代所有columns一个 row,例如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) )  
Run Code Online (Sandbox Code Playgroud)

输出:

<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  
Run Code Online (Sandbox Code Playgroud)

迭代全部 rows,只有column 2:

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))
Run Code Online (Sandbox Code Playgroud)

输出:

<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
Run Code Online (Sandbox Code Playgroud)

用Python测试:3.4.2 - openpyxl:2.4.1 - LibreOffice:4.3.3.2