#python #excel #python-3.x
#python #excel #python-3.x
Вопрос:
У меня есть файл Excel, я пытаюсь прочитать первую строку, передать ее другой функции и удалить первую строку из Excel и сохранить ее, пока не будут израсходованы все строки в файле Excel.
Я попытался использовать openpyxl, я смог удалить первую строку с первой попытки, но когда я снова пытаюсь прочитать файл Excel, он выдает мне это исключение
openpyxl.utils.exceptions.CellCoordinatesException: There is no row 0 (A0)
вот мой код
import openpyxl
filename = "example.xlsx"
wb = openpyxl.load_workbook(filename)
sheet = wb['Sheet1']
status = sheet['A1'].value
print(status)
sheet.delete_rows(0, 1)
wb.save(filename)
Комментарии:
1. Под «я пытаюсь прочитать первую строку, передав ее другой функции», вы имеете в виду передачу данных, которые вы прочитали из строки, в другую функцию, верно?
2. Да, это верно
Ответ №1:
Непроверено, но следующая настройка должна это исправить. Вместо чтения 'A1'
и удаления строки 0
вы ищете первую непустую строку, используя min_row
ее, и читаете и удаляете.
import openpyxl
filename = "example.xlsx"
wb = openpyxl.load_workbook(filename)
sheet = wb['Sheet1']
status = sheet.cell(sheet.min_row, 1).value
print(status)
sheet.delete_rows(sheet.min_row, 1)
wb.save(filename)
Комментарии:
1. Я попробовал это, он удаляет строки, как и ожидалось, но когда он добрался до последней, после ее удаления он все равно добавляет последнюю строку в файл Excel и читает его снова, я ожидаю, что он также удалит последнюю строку и в итоге получит пустой файл.
2. Я нашел способ обойти это, проверив, равна ли первая строка последней строке, используйте данные последней строки и завершите работу.
3. @sherlockholmes Я бы предложил ту же настройку. У меня никогда не было подобной проблемы, поэтому я понятия не имел, что вы не можете удалить последнюю строку и оставить рабочий лист пустым. Не могли бы вы отредактировать мой ответ своим решением? Это будет полезно для любого другого пользователя, который прибудет сюда с той же проблемой
4. @sherlockholmes кроме того, в качестве (небольшого) улучшения производительности вы можете захотеть прочитать
min_row
иmax_row
только один раз создать для нее статическую переменную и использовать счетчик для увеличенияmin_row
. Это будет работать, только если у вас нет пустых строк
Ответ №2:
Как только строки удаляются с delete_rows(beg_row, end_row)
помощью, их индекс также удаляется, что означает, что строки с индексом больше не существует 0
.