代码之家  ›  专栏  ›  技术社区  ›  Matt Cottrill

如何通过Python win32将计算成员添加到数据透视表

  •  0
  • Matt Cottrill  · 技术社区  · 7 年前

    我试图将一个计算列添加到这个透视表中,该透视表是通过一个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 回复  |  直到 7 年前
        1
  •  3
  •   Parfait    7 年前

    实际上,方法是 PivotTable.CalculatedFields().Add() 根据 docs . 考虑在下面放置:

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