How to delete rows that satisfy some criteria in an excel spreadsheet?

openpyxl, python

Solution

2018 update: I was searching how to delete a row today and found that the functionality is added in openpyxl 2.5.0-b2. Just tried and it worked perfectly. Here's the link where I found the answer: https://bitbucket.org/openpyxl/openpyxl/issues/964/delete_rows-does-not-work-on-deleting

And here's the syntax to delete one row:

ws.delete_rows(index, 1)

where: 'ws' is the worksheet, 'index' is the row number, and '1' is the number of rows to delete.

There's also the ability to delete columns, but I haven't tried that.

Problem

I would like to create a "reduced" version of an Excel (xlsx) spreadsheet (i.e. by removing some rows according to some criterion), and I'd like to know if this can be done with `openpyxl`. In (pythonish) pseudo-code, what I want to do would look something like: ``` wb = openpyxl.reader.excel.load_workbook('/path/to/workbook.xlsx') sh = wb.get_sheet_by_name('someworksheet') # weed out the rows of sh according to somecriterion sh.rows[:] = [r for r in sh.rows if somecriterion(r)] # save the workbook, with the weeded-out sheet wb.save('/path/to/workbook_reduced.xlsx') ``` Can something like this be done with `openpyxl`, and if so, how?

Original source