Por que isso Python loop de falha para a saída para a próxima linha de excel?
Pergunta
Primeiro e acima de tudo:obrigado por qualquer ajuda antecipadamente.Eu sou um total de programação do principiante, e o meu código vai refletir isso.Eu vou tentar descrever o que eu estou tentando fazer e exibir o código.Novamente, obrigado pelo seu tempo e explicações.
O objetivo: Eu estou querendo ter o python abrir um arquivo do excel (output.xls), e a entrada de um valor (no caso, 'texto de teste') para a próxima linha disponível nesse documento.Que eu tenha tentado usar um loop 'while', e um 'se' instrução para conseguir este feito.Embora nem retornar erros, tanto deles não conseguem mover-se corretamente a saída passado a segunda linha.Aqui está o que eu tenho.
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)
O que eu estou tentando dizer abaixo -ENQUANTO- a célula não está em branco (tipo 6) e, em seguida, adicionar uma linha e repita.Ou seja:Continue indo até que você bata uma linha em branco na quarta coluna.
while cell.ctype != 6:
row = row + 1
ws.write(row,4,a)
E aqui, eu estou esperando para confirmar os resultados.
print cell.ctype
rb.save('output.xls')
Independentemente disso, quando eu executar o código, ele não parece ter passado a primeira linha.É como se o código diz, "grande, a primeira célula não é o tipo de seis," mas não consegue passado.Apesar de horas de pesquisa na net, eu não consigo encontrar uma razão do porquê.
Qualquer ajuda / orientação é muitíssimo apreciado.
--- EDITAR ---
Veja aqui os erros que eu estou recebendo para a sugestão de respostas.O erro é 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
Solução
Você nunca mover para a próxima célula.Basta alterar a variável row
não influência cell
.Tente este código em vez disso:
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
Outras dicas
Você avançar índice de linha - mas você não leia uma nova célula, a célula permanece o mesmo, e você inserir um loop infinito
while cell.ctype != 6:
row = row + 1
cell = sheet.cell(row,4)
deve funcionar
EDITAR:
Você está recebendo a execução de linhas - facilmente corrigido
try:
while cell.ctype != 6:
row = row + 1
cell = sheet.cell(row,4)
except IndexError:
<do something>
Pessoalmente, eu tenho um sentimento de que o seu correr muito rápido - você está tentando obter muito profundo, sem ter de aprender o básico