首页 > 解决方案 > 使用 win32com.client 库,无法从使用其他工作簿中的范围创建的 PivotCache 创建数据透视表

问题描述

我正在尝试使用从名为“Reports.xlsx”的其他工作簿中的 dataRange 创建的 PivotCache 在名为“Model.xlsx”的工作簿中创建一个数据透视表

当我在创建 dataRange 的同一工作簿(Reports.xlsx)中创建数据透视表时,数据透视表创建成功,但是当我尝试在其他工作簿中创建数据透视表时,它给出错误“发生异常”

我的代码太长了,这就是为什么我不分享它,因为它可能会使读者感到困惑。我希望我已经充分阐述了这个问题。

标签: pythonexcelvbaautomationwin32com

解决方案


使用 COM 时,需要“在 Excel 中,通过 Excel”创建数据透视表。我使用了 xlwings(它的核心是一个 COM 包装器)。这个想法是创建一个数据透视缓存并使用数据透视缓存来生成数据透视表。

import xlwings as xw
from xlwings import constants

wb = xw.Book.caller()

pivot_table = xw.sheets.add(name='Pivot Table', after='Sheet1')

PivotTableName = 'ReportPivotTable'

PivotCache = wb.api.PivotCaches().Create(SourceType=constants.PivotTableSourceType.xlDatabase, SourceData=PivotSourceRange.api, Version=constants.PivotTableVersionList.xlPivotTableVersion14)

PivotTable = PivotCache.CreatePivotTable(TableDestination="'Pivot Table'!R1C1", TableName=PivotTableName, DefaultVersion=constants.PivotTableVersionList.xlPivotTableVersion14)
PivotTable.PivotFields('Last Name').Orientation = constants.PivotFieldOrientation.xlRowField
PivotTable.PivotFields('Last Name').Position = 1
PivotTable.PivotFields('Project Code').Orientation = constants.PivotFieldOrientation.xlRowField
PivotTable.PivotFields('Project Code').Position = 2
PivotTable.PivotFields("total").Orientation = constants.PivotFieldOrientation.xlDataField

当我这样做时,我发现 Microsoft 对数据透视表的帮助非常宝贵。


推荐阅读