Excel-如何在数据透视表中查找特定数据透视字段的位置(即哪些列)?

Excel-如何在数据透视表中查找特定数据透视字段的位置(即哪些列)?,excel,vba,delphi,pivot-table,Excel,Vba,Delphi,Pivot Table,我正在构建一个自动创建数据透视表的例程。一切正常…我添加了行、列、筛选器和值。最后一步,我想格式化这些值。我找不到任何显示“值输入/数据透视字段”在哪一列中结束的属性。假设我有两个值数据透视字段 Pivot1 := fmyPivotTable.AddDataField( 'Revenue', 'Revenue', xlSum ); Pivot2 := fmyPivotTable.AddDataField( 'Locations', 'Locations', xlCount ); 我正在寻找一种

我正在构建一个自动创建数据透视表的例程。一切正常…我添加了行、列、筛选器和值。最后一步,我想格式化这些值。我找不到任何显示“值输入/数据透视字段”在哪一列中结束的属性。假设我有两个值数据透视字段

Pivot1 := fmyPivotTable.AddDataField( 'Revenue', 'Revenue', xlSum );
Pivot2 := fmyPivotTable.AddDataField( 'Locations', 'Locations', xlCount );
我正在寻找一种信息,它可以告诉我,数据透视1的数据位于C、E和G列,而数据透视2的数据位于D、F和H列。我能找到的最接近的数据是labelrange和position,但这两者都不是我真正需要的。我是用Delphi写的,但如果有人知道如何在VBA中实现这一点,我可以转换

其他信息。 我使用的代码与此类似。(我不得不删掉一些不相干的东西)。我要寻找的是一种确定哪些列将保存来自v1和v2的数据的方法

  var
    // Filter Fields
      f1, f2: OleVariant;
      // Row Fields
      r1, r2 : OleVariant;
      // Column Fields
      c1: OleVariant;
      // Value Fields
      v1, v2: OleVariant;
      PivotStartAddr: String;
      OrigDataRange: ExcelRange;      
      myPivotCache: PivotCache;
      myPivotTable: PivotTable; 
      RawSheet, PivotSheet1 : _Worksheet;


    begin

      RawSheet := oExcel.ActiveSheet as _Worksheet;
      OrigDataRange := RawSheet.Range['A1', 'BA35285'];

      // Create a Pivot Cache
      myPivotCache := oExcel.ActiveWorkbook.PivotCaches.Create(xlDatabase,OrigDataRange,xlPivotTableVersion15);

      // Create a New Sheet 
      oExcel.Worksheets.Add(EmptyParam, RawSheet, 1, xlWorksheet, LOCALE_USER_DEFAULT);
      PivotSheet1 := oExcel.ActiveSheet as _Worksheet;
      PivotSheet1.Name := 'Pivot Sheet';

     // Create a Pivot table within the PivotCache
       PivotStartAddr :=  'R4C1';
       myPivotTable := myPivotCache.CreatePivotTable(PivotStartAddr, 'PivotTable56', EmptyParam,xlPivotTableVersion15);

       // Add Filter Fields
       f1 :=  myPivotTable.PivotFields('OVI_MAJOR');
       f1.Caption := 'Industry';
       f1.Orientation := xlPageField;
       f1.Position :=1 ;

       f2 :=  myPivotTable.PivotFields('APPS_ORG_TYPE');
       f2.Caption := 'Apps';
       f2.Orientation := xlPageField;
       f2.Position :=2 ;

       // Add Rows  
       r1 :=  myPivotTable.PivotFields('PARENT_ACCOUNT_NAME');
       r1.Caption := 'l Name';
       r1.Orientation := xlRowField;
       r1.Position := 1;

       r2 :=  myPivotTable.PivotFields('ACCOUNT');
       r2.Caption := 'Account';
       r2.Orientation := xlRowField;
       r2.Position := 2;

       // Add Columns
       c1 :=  myPivotTable.PivotFields('CLOUD_MARKETING_SEGMENT');
       c1.Caption := 'Mkt Segment';
       c1.Orientation := xlColumnField;
       c1.Position := 1;


       v1 := myPivotTable.AddDataField('SIC', 'SIC', xlCount);
       v2 := myPivotTable.AddDataField('REVENUE', 'Revenue', xlSum);
       end;

也许我正遭受着大脑衰退的痛苦,但我越是试图了解你的问题是什么,我就越难发现它。当您将摘要列添加到数据透视表中时,如果它们必须立即显示在未汇总列的右侧,并且如果我尝试将它们转移到其他列,Excel将不允许我这样做。所以,您知道数据透视表插入的位置,以及未汇总列和汇总列是什么,所以您应该知道它们的位置,即在未汇总列右侧的列中,否?@@MartynA,在最简单的示例中,您是正确的。在上面的示例中,SIC列和收入列(即我的摘要)的数量取决于列字段Cloud_Marketing_Segment的值的数量。我的数据有3个云营销部分的值,加上空格,加上总数,这意味着我将有5组SIC的交替列,然后是收入。当我有多个级别的列时,这会变得更加复杂。我可以根据列名计算出来,但不能保证。谢谢。到目前为止,我自己试图编造关于PT的信息的尝试都以惨败告终。祝你好运@@MartynA-这实际上是针对Delphi的Excel库。我做了很多出色的工作。如果你想要一份,请告诉我。谢谢,你太慷慨了。如果我能很快赶上其他的事情,我会告诉你的。