win32com, функция PageSetup.Pages.Count работает некоррекно

Необходимо все эксель-файлы, лежащие в одной папке, собрать в один файл, разместив каждый из них на отдельном листе:

def collect_to_one():
"""Функция собирает все excel-файлы в один том"""
sgmts = segmentation(start_page)
for book in range(len(sgmts)):
    wb = excel.Workbooks.Add()
    for file in range(len(sgmts[book])):
        """Цикл копирует лист из файла в сводный файл"""
        print(sgmts[book][file])
        w = excel.Workbooks.Open(os.path.join(os.getcwd(), sgmts[book][file]))
        w.Sheets(1).Copy(After=wb.Worksheets(file + 1))
        wb.ActiveSheet.Name = sgmts[book][file]
        w.Save()
    wb.SaveAs(os.path.join(os.getcwd(), '_'.join(('Сводный', sgmts[book][-1]))))

Далее требуется выполнить сквозную нумерацию листов, и вот тут начинаются проблемы: Использую win32com.client, и вне зависимости от того, прописываю я win32com.client.Dispatch('Excel.Application') или же win32com.client.gencache.EnsureDispatch('Excel.Application'), все равно возникает проблема при подсчете количества листов. За сквозную нумерацию отвечает функция:

def enum(start_page):
"""Функция выполняет нумерацию страниц в сводном файле"""
wb = excel.Workbooks.Open(os.path.join(os.getcwd(), "Сводный_09-04-01 +.xlsx"))
# wb.Sheets(2).Move(Before=wb.Sheets(4))
# wb.Sheets(2).Move(Before=wb.Sheets(4))
for i in range(2, len(files) + 2):
    ws_list = wb.Worksheets(i)
    ws_list.Application.PrintCommunication = False
    ws_list.DisplayPageBreaks = True
    print(ws_list.PageSetup.Pages.Count)
    ws_list.PageSetup.FirstPageNumber = start_page  # присваивание первой страницы файлу
    start_page += ws_list.PageSetup.Pages.Count
    ws_list.Application.PrintCommunication = True
wb.SaveAs(os.path.join(os.getcwd(), "Сводный_09-04-01 +.xlsx"))

И если ничего не предпринимать, то он почему-то думает, что количество листов у 6 файлов с расширением .xlsx соответственно равно:

0 (фактически файл содержит 4 листа)

0 (фактически файл содержит 4 листа)

0 (фактически файл содержит 5 листов)

0 (фактически файл содержит 35 листа)

0 (фактически файл содержит 7 листов)

2 (фактически файл содержит 2 листа)

Корректно он начинает считать только в том случае, если я вручную зайду в сводный файл, поменяю местами любые листы, а потом верну их обратно на то же место. В таком случае, при вызове функции, нумерация и подсчет листов выполняется корректно. Также данную проблему решает "костыль", который делает то же самое, что я описал выше:

wb.Sheets(2).Move(Before=wb.Sheets(4))
wb.Sheets(2).Move(Before=wb.Sheets(4))

Однако, хочется понять, почему так происходит, в результате чего он начинает нумеровать правильно просто в результате изменения местоположения листов в сводном файле


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