Используя библиотеку win32com.client, невозможно создать сводную таблицу из PivotCache, созданную с использованием диапазона в другой книге - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь создать сводную таблицу в книге с именем «Model.xlsx», используя PivotCache, созданный из dataRange в другой книге с именем «Reports.xlsx»

Когда я создаю сводную таблицу в той же книге ( Reports.xlsx), из которого создается dataRange, тогда успешно создается сводная таблица, но когда я пытаюсь создать сводную таблицу в другой книге, выдается ошибка «исключение произошло»

Мой код слишком длинный, поэтому я не являюсь делиться этим, потому что это может запутать читателя. Я надеюсь, что я достаточно подробно проработал вопрос.

1 Ответ

0 голосов
/ 04 мая 2020

При использовании 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 для сводных таблиц неоценима.

...