使用XLWINGS刷新数据透视表

时间:2014-12-02 16:41:35

标签: python vba xlwings

我正在尝试刷新由XLWINGS写入的数据的数据透视表。 由于我不知道如何直接从XLWINGS进行,我尝试使用VBA。

让我们分两个步骤分割我的过程:

步骤1

我从vba启动python代码(我的模块名称是“PosRep”,python代码通过xlwings写回指定表单中的一系列数据。

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

第2步

但由于我事先并不知道我在Excel中新创建的Range的大小,我想选择它,添加一个新的Name(NamedRange)并刷新我的pivot(已经链接到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模块存在冲突,但我无法弄清楚它是什么...... 任何人的帮助都非常受欢迎! THX

3 个答案:

答案 0 :(得分:1)

问题来自VBA代码。以下代码工作正常:

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

答案 1 :(得分:0)

也许为时已晚,但是您可以在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()

答案 2 :(得分:0)

我一直在寻找如何在Mac上解决此问题的方法,这是刷新所有数据透视表等的方法:

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

希望这可以节省其他人的时间。花了我一段时间才弄清楚。