Как удалить первую строку в Excel с помощью openpyxl

#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 .