Лучший способ перебирать строки Excel и удалять их в соответствии с критериями

1

Поэтому у меня очень простой цикл, который удаляет строки, если значение в столбце 9 равно имени сотрудника:

import openpyxl, os

wb = openpyxl.load_workbook('Opportunities.xlsx', data_only=True)
sheet = wb['OpportunityList']

for rowNum in range(2, sheet.max_row):
    if sheet.cell(row = rowNum, column = 9).value == 'Employee Name':
        print('Deleting row ' + str(rowNum))
        sheet.delete_rows(rowNum)

wb.save('1.xlsx')

Проблема, с которой я сталкиваюсь, заключается в том, что пусть строка 20 соответствует критериям и удаляется, строка 21 теперь становится строкой 20. Таким образом цикл for будет прогрессировать с помощью rowNum 21, и если строка, которая раньше была 21, а теперь 20, соответствует критериям, так что строка не будет удалена, поскольку цикл for уже проверяет строку 20 и не может вернуться.

Как решить эту проблему? Может ли положить строки в список, а затем удалить их, возможно, работать? Или это может вызвать ту же проблему? заранее спасибо

  • 0
    for c in reversed(sheet['9']): if c.value == "Employee Name": sheet.delete_rows(c.row)
Теги:
for-loop
openpyxl

1 ответ

1
Лучший ответ

Начинайте снизу и делайте свой путь!

for rowNum in range(sheet.max_row, 1, -1):
    if sheet.cell...
  • 1
    Потрясающие! Не нужно -1 после sheet.max_row, но в остальном работает отлично. Спасибо!!
  • 1
    Интересно. @ user1452574 Вы исключили строку sheet.max_row в своем вопросе. Использование моего ответа без -1 на листе.max_row включает в себя это число в диапазоне, который afaik выходит за пределы листа.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню