Обновление сводной таблицы с помощью XLWINGS

Я пытаюсь обновить сводную таблицу в Excel по данным, записанным XLWINGS. Поскольку я не знаю, как это сделать напрямую из XLWINGS, я попытался использовать VBA.

Давайте разделим мой процесс на 2 этапа:

Шаг 1

Я запускаю код Python из vba (имя моего модуля — «PosRep», код Python записывает диапазон данных на указанный лист благодаря xlwings.

Sub launchPython()
RunPython ("import PosRep; PosRep")
End Sub

Шаг 2

Но поскольку я заранее не знаю размер моего недавно созданного диапазона в Excel, я хочу выбрать его, добавить новое имя (NamedRange) и обновить сводку (уже связанную с NamedRange).

Sub SelectRange()
Worksheets("GPODump").Range("A1").Select
'...
End Sub

Оба сабвуфера работают независимо друг от друга. Но я не могу заставить их работать в сыром виде. Следующий код:

Sub Main()
launchPython
SelectRange
End Sub

выдает ошибку VBA "Ошибка выбора метода класса Range" в инструкции:

Worksheets("GPODump").Range("A1").Select

Я предполагаю, что есть конфликт с модулем XLWINGS VBA, но я не могу понять, что это может быть... Любая помощь будет более чем приветствуется! Спасибо


person ripperlover    schedule 02.12.2014    source источник


Ответы (3)


Проблема возникла из-за кода VBA. Следующий код работает нормально:

Sheets("GPODump").Select
Sheets("GPODump").Range("A1").Select
person ripperlover    schedule 03.12.2014

Может быть, уже слишком поздно, но вы можете сделать это в xlwings - это то, что сработало для меня:

import xlwings as xw
# open excel App
app_excel = xw.App(visible = False)
# open the excel file, select the tab and the PivotTable to refresh
wbook = xw.Book( 'YourFile.xlsx' )
wbook.sheets['Tab1'].select()
wbook.api.ActiveSheet.PivotTables('PivotTableName').PivotCache().refresh()
person nick    schedule 09.01.2019
comment
Неизвестное свойство, элемент или команда: ActiveSheet. Любая помощь? - person Felipe Maion; 15.11.2020
comment
@FelipeMaion в MacOS кажется, что объекты api имеют верблюжий регистр. Попробуйте wb.api.active_sheet - person N4v; 28.01.2021
comment
@N4v Да, я узнал, что читал github здесь: github.com/xlwings/xlwings/blob/master/resources/mac/ - person Felipe Maion; 30.01.2021
comment
Refresh() не Refresh() работал у меня - все остальное, как описано. БЛАГОДАРНОСТЬ! Никогда не поздно... - person DrWhat; 29.07.2021
comment
При запуске всего этого в сценарии мне также нужно было активировать книгу перед выбором листа с помощью: wbook.activate() - person DrWhat; 04.08.2021
comment
@DrWhat, я думаю, они изменили пакет с тех пор, как я в последний раз использовал этот фрагмент кода. Мне не приходилось так много использовать xlwings с 2019 года. - person nick; 05.08.2021

Я искал, как решить эту проблему для Mac, вот как я обновил все сводные таблицы и т. д.:

wb.api.active_sheet.refresh_all(wb.api)

Надеется, что это сэкономит кому-то еще время. Мне потребовалось время, чтобы понять это.

person Felipe Maion    schedule 24.11.2020