web-dev-qa-db-fra.com

Itérer sur des feuilles de calcul, des lignes et des colonnes

Je veux imprimer toutes les données (toutes les lignes) d'une colonne spécifique en python en utilisant openpyxl Je travaille de cette façon;

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)

Mais ça donne 

si ligne <1 ou colonne <1: TypeError: types non commandables: Tuple () <int ()

Parce que je suis dans row=i. Si j'utilise sheet.cell(row=4, column=2).value, il affiche la valeur de la cellule. Mais comment puis-je parcourir tous les documents?

Modifier 1

Certaines recherches ont montré que les données peuvent être obtenues en utilisant le nom de la feuille. Le Sheet 1 existe dans le fichier .xlsx mais ses données ne sont pas en cours d'impression. Un problème dans ce code? 

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
6
Humty

Lire la Documentation OpenPyXL

Itération sur tous les worksheets dans un workbook, par exemple: 

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

Sortie

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

Itération sur toutes les rows et columns dans one Feuille de calcul: 

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

Sortie

<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  

Itération sur tous les columns de unrow, par exemple 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) )  

Sortie

<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  

Itération sur allrows, uniquement 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))

Sortie

<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

Testé avec Python: 3.4.2 - openpyxl: 2.4.1 - LibreOffice: 4.3.3.2 

9
stovfl

Essaye ça,

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