【问题标题】:How to add Calculated Member to Pivot Table via Python win32如何通过 Python win32 将计算成员添加到数据透视表
【发布时间】:2018-12-23 03:05:19
【问题描述】:

我正在尝试将一个计算列添加到这个数据透视表中,该数据是通过带有import win32com.client 的 python 脚本生成的。

下面发布了生成数据透视表的代码。我不确定如何添加列。在 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

【问题讨论】:

    标签: excel vba python-3.x pivot-table win32com


    【解决方案1】:

    其实方法是PivotTable.CalculatedFields().Add()根据docs。考虑将下面放在底部:

    CalcField = PivotTable.CalculatedFields().Add("OC_GrossPct", "= OoCUnits / GrossUnits")
    
    PivotTable.PivotFields("OC_GrossPct").Orientation = win32c.xlDataField
    

    【讨论】:

    • 感谢您的指导。我需要使用 PivotTable.CalculatedFields().Add("OC_GrossPct", "= OoCUnits / GrossUnits") 才能使用额外的 ()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    相关资源
    最近更新 更多