Pourquoi cette boucle Python ne parvient-elle pas à afficher la prochaine ligne Excel disponible ?

StackOverflow https://stackoverflow.com//questions/21016246

Question

Tout d'abord:Merci d'avance pour toute aide.Je suis totalement novice en programmation et mon code le reflétera.Je vais essayer de décrire ce que j'essaie de faire et d'afficher le code.Encore une fois, merci pour votre temps et vos explications.

L'objectif: Je souhaite que Python ouvre un fichier Excel existant (output.xls) et saisisse une valeur (dans ce cas, « texte de test ») dans la prochaine ligne disponible de ce document.J'ai essayé d'utiliser une boucle « while » et une instruction « if » pour y parvenir.Bien qu’aucun d’entre eux ne renvoie d’erreurs, aucun d’eux ne parvient à déplacer correctement la sortie au-delà de la deuxième ligne.Voici ce que j'ai.

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)

Ce que j'essaie de dire ci-dessous, c'est -ALORS QUE- la cellule n'est pas vide (tapez 6), puis ajoutez-en une à la ligne et répétez.C'EST À DIRE:Continuez jusqu'à ce que vous ayez atteint une ligne vide dans la quatrième colonne.

while cell.ctype != 6:
    row = row + 1

ws.write(row,4,a)

Et là, j'espère confirmer les résultats.

print cell.ctype
rb.save('output.xls')

Quoi qu'il en soit, lorsque j'exécute le code, il ne semble pas dépasser la première ligne.C'est comme si le code disait : « super, la première cellule n'est pas de type six », mais ne va pas au-delà.Malgré des heures de recherche sur le net, je n'arrive pas à trouver une raison à cela.

Toute aide/conseils est extrêmement apprécié.

--- MODIFIER ---

Voici les erreurs que je reçois concernant les réponses suggérées.L'erreur est identique.

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
Était-ce utile?

La solution

Vous ne passez jamais à la cellule suivante.Il suffit de changer la variable row n'influence pas cell.Essayez plutôt ce code :

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

Autres conseils

vous avancez index de ligne - mais vous ne lisez pas une nouvelle cellule, votre cellule reste donc la même, et vous entrez une boucle sans fin

while cell.ctype != 6:
    row = row + 1
    cell = sheet.cell(row,4)

devrait fonctionner

EDIT:

Vous êtes à court de lignes - facilement fixe

try:
    while cell.ctype != 6:
        row = row + 1
        cell = sheet.cell(row,4)
except IndexError:
    <do something>

Personnellement, j'ai un sentiment que votre course trop vite - vous essayez de devenir trop profonde sans apprendre les bases

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top