Удалить все пустые строки из файла Excel без перезаписи файла - PullRequest
0 голосов
/ 16 мая 2019

У меня есть скрипт, который обновляет электронную таблицу с текущими событиями и удаляет их по истечении x дней.Таблица становится очень большой.У меня есть логика, которая добавляет строки, когда приходят новые события, и удаляет строки старше x дней.Самые последние события находятся внизу таблицы.

Люди работают над этой таблицей и иногда выделяют строки.Я хотел бы сохранить это выделение таким образом, чтобы при запуске сценария и перемещении строки 80 (выделенный) в строку 40, строка 40 выделялась, а 80 - нет.У меня проблема в том, что 80 также остаются выделенными.Поэтому мне нужна функция для удаления всех строк, которые не имеют текста (но могут иметь подсветку).

Это то, что у меня есть:

def deleteEmptyRows(file, sheet_name):
    """Remove empty rows from bottom of excel file.
    Issue: If I highlight row 80 and the script runs,
    moving that row to row 40, both row 40 and 80 will
    be highlighted.
    Solution: delete empty rows (only containing highlighting)
    at the bottom of the excel file. This also helps keep
    the file smaller."""

    book = openpyxl.load_workbook(file)
    writer = pd.ExcelWriter(file, engine='openpyxl')
    writer.book = book
    writer.sheets = {ws.title: ws for ws in book.worksheets}
    maxRow = len(pd.read_excel(file)) + 2
    sheetLen = int("".join([x for x in writer.sheets[sheet_name].calculate_dimension().split(':')[1] 
                            if x.isalpha() == False]))



    openpyxl.worksheet.worksheet.Worksheet.delete_rows(writer.sheets[sheet_name]
                                                        ,idx=maxRow, amount=(sheetLen-maxRow))

    print('delete {} rows starting at row {}'.format((sheetLen-maxRow), maxRow))

    writer.save()

Но это не удалениевыделение в нижней части электронной таблицы или удаление строк, хотя события в операторе печати выглядят правильно.

...