Почему этот цикл Python не может вывести следующую доступную строку Excel?

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

Вопрос

Прежде всего:Спасибо за любую помощь заранее.Я новичок в программировании, и мой код это отражает.Я попытаюсь описать, что я пытаюсь сделать, и покажу код.Еще раз спасибо за ваше время и объяснения.

Цель: Я хочу, чтобы Python открыл существующий файл Excel (output.xls) и ввел значение (в данном случае «тестовый текст») в следующую доступную строку в этом документе.Я попытался использовать цикл while и оператор if, чтобы сделать это.Хотя ни одна из них не возвращает ошибок, обе они не могут правильно переместить вывод за пределы второй строки.Вот что у меня есть.

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)

Ниже я пытаюсь сказать следующее: -ПОКА- ячейка не пуста (введите 6), затем добавьте ее в строку и повторите.ИЕ:Продолжайте, пока не дойдете до пустой строки в четвертом столбце.

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

ws.write(row,4,a)

И вот, я надеюсь подтвердить результаты.

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

Тем не менее, когда я запускаю код, кажется, что он не проходит дальше первой строки.Как будто код говорит: «Отлично, первая ячейка не шестого типа», но дальше этого не проходит.Несмотря на часы поиска в сети, я не могу найти причину, почему.

Любая помощь/руководство очень ценится.

--- РЕДАКТИРОВАТЬ ---

Вот ошибки, которые я получаю на предложенные ответы.Ошибка идентична.

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
Это было полезно?

Решение

Вы никогда не переходите в следующую ячейку.Просто меняем переменную row не влияет cell.Вместо этого попробуйте этот код:

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

Другие советы

Вы продвигаете индекс строки - но вы не читаете новую ячейку, поэтому ваша клетка остается прежней, и вы вводите бесконечный цикл

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

должен работать

Редактировать:

Вы получаете заканчиваемые строки - легко исправлена

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

Лично у меня есть ощущение, что ваш бег слишком быстро - вы пытаетесь быть слишком глубоко без учета оснований

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top