从Excel文件删除所有空行,而不覆盖文件

时间:2019-05-16 18:44:00

标签: python excel pandas openpyxl

我有一个脚本,用于使用当前事件更新电子表格,并在它们存在超过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()

但这不会删除电子表格底部的突出显示或删除行,尽管打印语句中的数字看起来正确。

0 个答案:

没有答案