Openpyxl. При перезаписи листа в эксель новые данные вставляються после предыдущих оставляя пустые строки за собой

Знатоки, нужна помощь. Использую Openpyxl для записи данных в эксель предварительно выгрузив их с бд. Суть в том что мне нужно удалять (заменять) данные в листе эксель новыми данными, и по этому я написал код который сам удаляет данные с листа и после этого добавляет новые. Но проблема в том что он добавляет их после "старых" данных оставляя за собой пустые строки. Эта проблема решается сохранением файла после удаления данных, но это удваивает время работы програмы. Возможно есть какой то метод явно указать в какой ряд начинать запись, или что то еще? Спасибо за помощь.

    def write_to_excel(name_file):

    
    # request = request 
    # path_create_or_save_file = path_create_or_save_file 
    # name_sheet = name_sheet
    
    with psycopg2.connect(dbname='', 
                                     user="", 
                                     password="", 
                                     host='', 
                                     port ='') as connection:
        with connection.cursor(cursor_factory=DictCursor) as cursor:

            for name_sheet in sheets:
                print(f'Запускаю скрипт {name_sheet}')
                cursor.execute(sheets[name_sheet]) 
                rows = [[desc[0] for desc in cursor.description]]
                for row in cursor: 
                    rows.append(row)
                print(f'Выгрузили и скопировали {name_sheet}')

    
                clear_wb = load_workbook(name_file) 
                excel_sheet = clear_wb[name_sheet]
                excel_sheet.delete_cols(1,50)
                # clear_wb.save(name_file)
                # clear_wb.close()
                # write_wb1 = load_workbook(self.path_create_or_save_file)
                # excel_sheet1 = write_wb1[self.name_sheet]
                data = rows 
                
                # **Вот проблемный момент**
                for i in data:                        
                    excel_sheet.append(i)


                clear_wb.save(name_file)
                print(f'Сохранили {name_sheet}')
            clear_wb.close()

start_time = time.time()
write_to_excel('test.xlsx')
print("--- %s seconds ---" % (time.time() - start_time))

Ответы (2 шт):

Автор решения: Влад

Вопрос решен в комментах. На мое удивление удаление строк, а не столбцов помогло. Думал что будет такая же история, только вместо пустых строк будут пустые столбцы, но нет. Спасибо.

→ Ссылка
Автор решения: Сергей Кох

Это "чудо" объясняется из просмотра исходного года. исходный код удалялок. При удалении строк добавлена проверка словаря self._cells содержащего координаты ячеек и если он пуст, то счетчик строк обнуляется.

self._current_row = self.max_row
        if not self._cells:
            self._current_row = 0

При удалении столбцов этого нет, поэтому счетчики обнуляются сборщиком мусора только при записи изменений в файл. В общем, как показал опыт @Влада, после удаления возникают коллизии при работе с добавлением строк. Между этими действиями, должно быть сохранение в файл.

→ Ссылка