Как создать и отредактировать слайсер временной шкалы с помощью win32com python? - PullRequest
1 голос
/ 10 июля 2020

Я пытаюсь создать слайсер временной шкалы, используя win32com python. В настоящее время я использую win32com для управления данными Excel, но в данных мой клиент хочет, чтобы я установил верхний и нижний предел среза временной шкалы на определенный месяц. Я много гуглил и пришел к выводу, что единственный способ сделать это - это написать код на VBA и реализовать его в python, например здесь . У меня нет опыта работы с VBA, и мне было интересно, есть ли способ использовать win32com python вместо VBA win32com python.

Изменить:

После используя «Назначить макрос» в Excel, это код моего временного ограничителя:

ActiveWorkbook.SlicerCaches("NativeTimeline_Goods_Receipt_Date").TimelineState. _
        SetFilterDateRange "01/01/2020", "30/04/2020"

Теперь мне нужно изменить его на python и назначить дату начала и дату окончания переменной. Пока у меня это:

from win32com.client import Dispatch
excel = win32.gencache.EnsureDispatch('Excel.Application')
test_wb = excel.Workbooks.Open(test_file)
date_sl = test_wb.SlicerCaches("NativeTimeline_Goods_Receipt_Date")

1 Ответ

1 голос
/ 10 июля 2020

По-видимому, в Excel есть программа, которая может записывать все, что вы щелкаете, поэтому, если вы хотите манипулировать фильтром / срезом, вы можете щелкнуть элемент правой кнопкой мыши и выбрать «Назначить макрос». Затем вы можете щелкнуть по нему, поскольку он записывает ваши щелчки. Как только вы закончите, вы можете просмотреть его, снова выбрав «Назначить макрос», и появится всплывающее окно, в котором вы можете выбрать your_filter / slice_name_Click, и он предоставит вам код VBA. Все, что вам нужно сделать, это изменить его так, чтобы он соответствовал формату python.

Обновленный ответ для преобразования VBA в код python:

Ссылаясь на эта ссылка, я смог преобразовать VBA в код python и настроить дату в зависимости от вашего выбора даты.

Итак, код VBA следующий:

ActiveWorkbook.SlicerCaches("NativeTimeline_Goods_Receipt_Date").TimelineState. _
        SetFilterDateRange "01/01/2020", "30/04/2020"

И его версия python:

excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.DisplayAlerts = False
excel.Visible = True
test_wb = excel.Workbooks.Open(test_file, None, False)
date_sl = test_wb.SlicerCaches("NativeTimeline_Goods_Receipt_Date")
date_sl.TimelineState.SetFilterDateRange("01/01/2020", "30/04/2020")

В моем случае мне нужно изменить дату, установленную в зависимости от того, когда я запускаю код, и так далее, чтобы я мог просто назначить date в переменную и замените ею жестко заданную дату.

...