Итерация по листам, строкам, столбцам

Я хочу напечатать все данные (все строки) определенного столбца в 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)

но это дает

если строка

потому что я повторяю в row=i. Если я использую sheet.cell(row=4, column=2).value он печатает значение ячейки. Но как я могу перебрать весь документ?

изменить 1

на некоторых исследований, это установлено, что данные можно получить, используя имя листа. The на .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

2 ответов


читать Документация OpenPyXL

итерация по всем worksheets на workbook, например:

for sheet in wb.worksheets:
    print('sheet.title=%s' % sheet.title)  

выход:

sheet.title=Sheet  
sheet.title=Sheet1  
sheet.title=Sheet2  

итерация по всем 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 of один 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) )  

выход:

<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  

итерация по все 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))

выход:

<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


попробуйте это,

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)