通过 Delphi 在 Excel 中构建数据透视表

问题描述 投票:0回答:2

我正在使用 Delphi 编写一个构建数据透视表的程序。因为我想使用不同计数,所以我必须“添加到数据模型”,这显然会在后台创建一个 OLAP 多维数据集。这意味着我无法使用“正常”Excel_TLB 单元,而必须使用基于 GetActiveOLE 的例程...

我可以连接,我可以构建数据模型,我可以创建数据透视缓存和数据透视表对象,但是当我将字段添加到数据透视表时,我在运行时收到错误,通常是“找不到成员”。

当我单步执行代码时,在创建数据透视表对象后,我可以转到 Excel,并且看到数据透视表的可能列的列表。它们列在“范围”级别下。 (这就是当您为数据透视表“添加到数据模型”时我所期望的)。当我打开记录宏,并手动将字段(类别)添加到过滤器部分时,VBA代码如下所示...

 With ActiveSheet.PivotTables("PivotTable1").CubeFields("[Range].[Category]")
        .Orientation = xlPageField
        .Position = 1
    End With

下面是我的德尔福代码。这是最后的注释行不起作用。

procedure Build_Pivot;
var
// Connection Info
SheetName: String;
ConnRange, ConnName, ConnString, ConnCommand: String;
ConnPath, ConnFile : String;
ConnCount : Integer;

XLApp: Variant;
gConnection: Variant;
// Now define variables for the Pivot
myPivotCache: Variant;
myPivotTable: Variant;
StartCellRange: Variant;
fFilter1, fFilter2: Variant;

begin

 XLApp := GetActiveOleObject('Excel.Application');
 
  // Create the connection if we are adding to DataModel
  // Now parse our gFileName
  ConnPath := ExtractFileDir(gFileName);  // Global Variable of the FileName
  ConnFile := ExtractFileName(gFileName);
  
  SheetName := 'RawData';
  ConnRange := '$A:$H';
  ConnCount := XLApp.ActiveWorkbook.Connections.Count;
  ConnName := 'WorksheetConnection' + IntToStr(ConnCount) + '_' + SheetName + '!' + ConnRange;
  ConnString := 'WORKSHEET;' + ConnPath + '[' + ConnFile + ']' + SheetName;
  ConnCommand := SheetName + '!' + ConnRange;
  gConnection := XLApp.ActiveWorkbook.Connections.Add2(ConnName, '', ConnString, ConnCommand, 7, True, False);
  
  // Create the PivotCache
  myPivotCache := XLApp.ActiveWorkbook.PivotCaches.Create(xlExternal, gConnection, 7);

  // Create the PivotTable object;
  StartCellRange := XLApp.ActiveWorkbook.ActiveSheet.Range['A5', 'A5'];
  myPivotTable := myPivotCache.CreatePivotTable(StartCellRange, 'PivotTable1', True, 7);

   // I can now see my Pivot Object in Excel
  
   // Now add Filter Fields.  I have tried multiple variations, but cannot get anything to work
   // fFilter1 := XLApp.ActiveWorkbook.ActiveSheet.PivotTables('PivotTable1').CubeFields('[Range].[Category]');
   // fFilter1 := myPivotCache.PivotTable.CubeFields('[Range].[Category]');
   // fFilter1 := myPivotTable.CubeFields('[Range].[Category]');
  
    fFilter1.Orientation := xlPageField;

非常感谢任何帮助或想法。

excel delphi pivot-table
2个回答
0
投票

找到答案了。该参数需要作为数组传递,而不是在括号内。该代码有效...

 fFilter1 := myPivotTable.CubeFields['[Range].[Category]'];
 fFilter1.Orientation := xlPageField;

0
投票

我需要一些帮助。 Excel 表格包含 3 列。 使用 Delphi 7,我需要构建一个数据透视表。我应该如何开始?我应该从哪里开始?一步步。 谢谢你。

© www.soinside.com 2019 - 2024. All rights reserved.