¿Por qué este bucle de Python no se produce a la siguiente fila de Excel disponible?
Pregunta
ante todo: gracias por cualquier ayuda con anticipación. Soy un principiante de programación total, y mi código lo reflejará. Intentaré describir lo que estoy intentando hacer y mostrar el código. Una vez más, gracias por su tiempo y explicaciones.
El objetivo: Estoy deseando que Python abra un archivo de Excel existente (Output.xls) e ingrese un valor (en este caso, 'Test Text') a la siguiente fila disponible En ese documento. Intenté usar un bucle 'while', y una declaración 'si' para hacer esto. Aunque ninguno de los errores de retorno, ambos no pueden mover correctamente la salida más allá de la segunda línea. Esto es lo que tengo.
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)
Lo que estoy tratando de decir a continuación es - Mientras que la celda no está en blanco (tipo 6), luego agregue una a la fila y repita. Es decir: sigue adelante hasta que hayas golpeado una fila en blanco en la cuarta columna.
while cell.ctype != 6:
row = row + 1
ws.write(row,4,a)
Y aquí, estoy esperando confirmar los resultados.
print cell.ctype
rb.save('output.xls')
Independientemente, cuando ejecuto el código, no parece pasar la primera línea. Es como si el código dice: "Genial, la primera celda no es el tipo seis", pero no pasa más allá de eso. A pesar de las horas de búsqueda en la red, no puedo encontrar una razón en cuanto a por qué.
Cualquier ayuda / orientación es tremendamente apreciada.
--- Editar ---
Aquí están los errores que estoy recibiendo a las respuestas sugeridas. El error es idéntico.
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
Solución
Nunca te mueves a la siguiente celda.Simplemente cambiando la variable row
no influye en cell
.Pruebe este código en lugar:
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
Otros consejos
Usted avance índice de fila: pero no lee una nueva celda, por lo que su celular sigue siendo la misma, y ingrese un bucle sin fin
while cell.ctype != 6:
row = row + 1
cell = sheet.cell(row,4)
debería funcionar
Editar:
Se está quedando sin filas - Fácilmente arreglado
try:
while cell.ctype != 6:
row = row + 1
cell = sheet.cell(row,4)
except IndexError:
<do something>
Personalmente, tengo la sensación de que su carrera es demasiado rápido: estás tratando de ser demasiado profundo sin lo básico de aprendizaje