Perché questo ciclo Python non riesce a produrre alla successiva riga di Excel disponibile?
Domanda
Prima di tutto: grazie per qualsiasi aiuto in anticipo. Sono un novizio di programmazione totale, e il mio codice lo rifletterà. Tenterò a descrivere cosa sto tentando di fare e visualizzare il codice. Ancora una volta, grazie per il tuo tempo e spiegazioni.
L'obiettivo: Voglio avere Python Aprire un file Excel esistente (output.xls) e immettere un valore (in questo caso, "Testo del testo") alla riga successiva disponibile in quel documento. Ho tentato di usare un loop 'while' e una dichiarazione 'If' per farlo. Sebbene né restituire errori, entrambi non riescono a spostare correttamente l'uscita oltre la seconda riga. Ecco cosa ho.
from xlrd import open_workbook
from xlutils.copy import copy
import xlwt
wb = open_workbook('output.xls',formatting_info=True)
sheet = wb.sheet_by_name("sheet 1")
#This is the simple test text here.
a = 'just a test'
rb = copy(wb)
ws = rb.get_sheet(0)
row = 0
cell = sheet.cell(row,4)
.
Quello che sto cercando di dire qui sotto è -while - la cella non è vuota (tipo 6), quindi aggiungi uno alla riga e ripetere. Cioè: continua fino a quando non hai colpito una riga vuota nella quarta colonna.
while cell.ctype != 6:
row = row + 1
ws.write(row,4,a)
.
E qui, spero di confermare i risultati.
print cell.ctype
rb.save('output.xls')
.
A prescindere, quando eseguo il codice, non sembra superare la prima riga. È come se il codice dice: "Ottimo, la prima cella non è di tipo sei", ma non lo passa. Nonostante le ore di ricerca in rete, non riesco a trovare una ragione per cui.
Qualsiasi aiuto / orientamento è tremendamente apprezzato.
--- Modifica ---
Ecco gli errori che sto ricevendo alle risposte suggerite. L'errore è identico.
Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\Folder", line 19, in <module>
cell = sheet.cell(row,4)
File "C:\Python27\lib\site-packages\xlrd\sheet.py", line 395, in cell
xfx = self.cell_xf_index(rowx, colx)
File "C:\Python27\lib\site-packages\xlrd\sheet.py", line 421, in cell_xf_index
xfx = self._cell_xf_indexes[rowx][colx]
IndexError: list index out of range
. Soluzione
Non si sposta mai nella cella successiva.Basta cambiare la variabile row
non influenza cell
.Prova invece questo codice:
cell = sheet.cell(row,4)
while cell.ctype != 6:
row = row + 1
if row >= sheet.nrows:
break
cell = sheet.cell(row,4) # <-- actually move the "pointer" in the excel sheet
. Altri suggerimenti
Advancew Row Index - ma non hai letto una nuova cella, quindi la tua cella rimane la stessa e inserisci un loop senza fine
while cell.ctype != 6:
row = row + 1
cell = sheet.cell(row,4)
.
dovrebbe funzionare
Modifica:
Stai ricevendo le righe - facilmente fisse
try:
while cell.ctype != 6:
row = row + 1
cell = sheet.cell(row,4)
except IndexError:
<do something>
.
Personalmente, ho la sensazione che la tua corsa troppo veloce - stai cercando di diventare troppo profondo senza le basi di apprendimento