首页 > 解决方案 > Delete rows in reverse but skip header row

问题描述

I am trying to find a way to delete rows in reverse with != in excel sheet using openpyxl but skip header row 1.

The following way deletes the header row and I am not sure how to add the skip row 1:

for c in reversed(ws7['M']): 
    if c.value != 'Integration Live': 
        ws7.delete_rows(c.row)

I can delete without reverse this way below but have not been able to figure how to reverse it so the index doesn't get messed up during deletion (causing some rows to be missed by deletion process).

for row in ws7.iter_rows(min_col=13, max_col=13, min_row=2, max_row=None):
    if row[12].value != 'Integration Live':
        ws7.delete_rows(row[12].row)

Any suggestions on how I can delete rows in reverse while skipping the header row?

I have tried this but get an exception:

for row in reversed(ws7.iter_rows(min_col=None, max_col=None, min_row=2, max_row=None)):
    if row[12].value != 'Integration Live':
        ws7.delete_rows(row[12].row)

enter image description here

标签: pythonpython-3.xopenpyxl

解决方案


作为ws['M']返回元组最简单的事情是忽略第一个元素:

cells = ws['M'][1:]
for row in reversed(cells):
    …

推荐阅读