2015-04-22 28 views
6

Utilizzo il pacchetto openpyxl in Python(Canopy) per utilizzare i file excel. Abbiamo questo tutorial in questo link: LINKCome possiamo usare iter_rows() nel pacchetto Python openpyxl?

you can also use the openpyxl.worksheet.Worksheet.iter_rows() method: 

>>> tuple(ws.iter_rows('A1:C2')) 
((<Cell Sheet1.A1>, <Cell Sheet1.B1>, <Cell Sheet1.C1>), 
(<Cell Sheet1.A2>, <Cell Sheet1.B2>, <Cell Sheet1.C2>)) 

>>> for row in ws.iter_rows('A1:C2'): 
...  for cell in row: 
...   print cell 
<Cell Sheet1.A1> 
<Cell Sheet1.B1> 
<Cell Sheet1.C1> 
<Cell Sheet1.A2> 
<Cell Sheet1.B2> 
<Cell Sheet1.C2> 

Come possiamo importare openpyxl.worksheet.Worksheet.iter_rows() metodo in Python? Ho usato questo codice:

rendimenti
import openpyxl as op 
ms = op.load_workbook('mtest.xlsx') 

ws = ms.active 

op.worksheet.Worksheet.iter_rows() 

questo codice:

type object 'Worksheet' has no attribute 'iter_rows' 

Qual è il problema?

risposta

6

Come mostrato nella tutorial, è necessario chiamare il metodo iter_rows su un'istanza di un foglio di lavoro, ad esempio:

>>> for row in ws.iter_rows('A1:C2'): 
...  for cell in row: 
...   print cell 

o

>>> for row in ws.iter_rows(min_row=1, max_col=3, max_row=2): 
... for cell in row: 
...  print(cell) 
<Cell Sheet1.A1> 
<Cell Sheet1.B1> 
<Cell Sheet1.C1> 
<Cell Sheet1.A2> 
<Cell Sheet1.B2> 
<Cell Sheet1.C2> 

Come il vostro errore stati di segnalazione, si è chiamandolo su Worksheettipo, che non funzionerà; ha bisogno di essere chiamato su un oggetto :

op.worksheet.Worksheet.iter_rows() # wrong 

Vedi anche this example in un'altra risposta.

Per le versioni precedenti di openpyxl, potrebbe essere necessario assicurarsi di abilitare gli iteratori quando si carica la cartella di lavoro - vedere this thread. Questo non è richiesto per le versioni più recenti.

Ecco un esempio completo che ho appena testato in Python REPL (con openpyxl 1.8.3):

>>> import openpyxl as op 
>>> wb = op.load_workbook('/tmp/test.xlsx', use_iterators=True) 
>>> ws = wb.active 
>>> for row in ws.iter_rows(): 
... for cell in row: 
...  print cell 
... 
RawCell(row=1, column='A', coordinate='A1', internal_value=1.0, data_type='n', style_id='0', number_format='general') 
RawCell(row=1, column='B', coordinate='B1', internal_value=10.0, data_type='n', style_id='0', number_format='general') 
... 
+0

Non è necessario attivare iteratori nelle versioni più recenti; i fogli di lavoro standard hanno anche il metodo 'iter_rows()'. –

+0

Grazie - Mi sembra di avere una versione abbastanza vecchia (1.8.3, l'ultima è 2.2.1) - modificherà leggermente la risposta. – DNA

+0

Generalmente vale la pena eseguire l'aggiornamento. Spingerà presto una versione di bug 2.2.2, ma anche 2.2 è più affidabile e più veloce di 1.8 –