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

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top