Как добавить вычисляемый элемент в сводную таблицу с помощью Python Win32 - PullRequest
0 голосов
/ 23 декабря 2018

Я пытаюсь добавить вычисляемый столбец в эту сводную таблицу, которая генерируется с помощью сценария Python с import win32com.client.

Ниже приведен код, который генерирует сводную таблицу.Я не уверен, как добавить столбец.В VBA это было бы wb.PivotTable.CalculatedField.Add, но это не сработало (по крайней мере, синтаксис, который я пробовал).

Я пытаюсь вычислить [OoCUnits] / [GrossUnits]

#Make Pivot version with four weeks data
Excel = win32com.client.gencache.EnsureDispatch('Excel.Application')
win32c = win32com.client.constants
wb = Excel.Workbooks.Open(filename)
ws3 = wb.Worksheets('Dataset')

cl1 = ws3.Cells(1,1)
cl2 = ws3.Cells(max_row,max_col)
PivotSourceRange = ws3.Range(cl1,cl2)
ws3.Activate()
PivotSourceRange.Select()
wb.Sheets.Add (After=wb.Sheets(3))
ws4 = wb.Worksheets(4)
ws4.Name = 'Pivot'

cl3 = ws4.Cells(4,1)
PivotTargetRange = ws4.Range(cl3,cl3)
PivotTableName = 'OoCPivot'

#Make Pivot Table
PivotCache = wb.PivotCaches().Create(SourceType=win32c.xlDatabase, SourceData=PivotSourceRange, Version=win32c.xlPivotTableVersion14)
PivotTable = PivotCache.CreatePivotTable(TableDestination=PivotTargetRange, TableName=PivotTableName, DefaultVersion=win32c.xlPivotTableVersion14)

PivotTable.PivotFields('Product Name').Orientation = win32c.xlRowField
PivotTable.PivotFields('Product Name').Position = 1
PivotTable.PivotFields('Customer Number').Orientation = win32c.xlPageField
PivotTable.PivotFields('Customer Number').Position = 1
PivotTable.PivotFields('Customer Name').Orientation = win32c.xlPageField
PivotTable.PivotFields('Customer Name').Position = 2
PivotTable.PivotFields('Week Ending Date').Orientation = win32c.xlColumnField
PivotTable.PivotFields('Week Ending Date').Position = 1
DataField = PivotTable.AddDataField(PivotTable.PivotFields('GrossUnits'))
DataField.NumberFormat = '#0.00'
DataField = PivotTable.AddDataField(PivotTable.PivotFields('OoCUnits'))
DataField.NumberFormat = '#0.00'

Явставка значений с помощью DataField.Скрипт не представляет никаких проблем как есть.

РЕДАКТИРОВАТЬ: Точный код, который я реализовал для решения.Последние две строки просто форматируют.Я в том числе на случай, если это поможет кому-то еще.

CalcField = PivotTable.CalculatedFields().Add('OoC Unit %','= OoCUnits / GrossUnits')
DataField = PivotTable.AddDataField(PivotTable.PivotFields('OoC Unit %'))
DataField.NumberFormat = '#%'
PivotTable.DisplayErrorString = True

1 Ответ

0 голосов
/ 23 декабря 2018

На самом деле, метод PivotTable.CalculatedFields().Add() в соответствии с документами .Рассмотрите возможность размещения внизу внизу:

CalcField = PivotTable.CalculatedFields().Add("OC_GrossPct", "= OoCUnits / GrossUnits")

PivotTable.PivotFields("OC_GrossPct").Orientation = win32c.xlDataField
...