【发布时间】:2017-03-25 20:49:22
【问题描述】:
Delphi 10 / Seattle, Excel 2013。我正在使用 Delphi 构建 Excel 插件。这个插件将创建一个数据透视表。我的挑战是设置我想要的特定功能(计数、平均值、总和等)。如果我没有设置函数,则使用默认值 (COUNT),并且我的代码工作正常,数据透视表就像它应该的那样。如果我尝试更改 PivotField 上的函数,则会收到错误消息“无法设置 PivotField 类的 Function 属性”。在搜索错误时,我发现了 2 个常见原因。 (1) Pivot 表必须具有默认版本的 xlPivotTableVersion15,并且 (2) PivotField 方向必须设置为 xlDataField。我都做了,当鼠标悬停时,IDE 会显示两者的整数值,所以我知道它们是定义的。
我尝试获取(而不是设置)PivotField.function 的值。我收到类似的错误“无法获取 PivotField 类的函数属性”。我要汇总的列称为“#Clicks”。有问题的代码行是
myPivotTable.PivotFields('#Clicks').function := xlSum;
如果我注释掉这一行,我的例程运行良好,尽管我得到了默认的 COUNT 函数,而不是我想要的 SUM 函数。
任何想法表示赞赏。请注意,当注释掉该行并运行代码时,我可以进入 Excel,进入 PivotField 列表,并将函数从 Count 更改为 Sum。这是我的完整代码。
procedure T_ZTemplateForm.TestPivotTable;
var
myPivotCache: OleVariant;
myPivotTable : OleVariant;
myActive_WorkBook : OleVariant;
TabDestination : string;
f1: OleVariant;
begin
// Add the new Sheet
XLApp.Connect; // XLApp is a global variable, pointing to the Excel instance
myActive_WorkBook := XLApp.ActiveWorkbook;
XLApp.Worksheets.Add(EmptyParam, EmptyParam,1, xlWorksheet, LOCALE_USER_DEFAULT );
// Get a handle to the new sheet and set the Sheet Name
sheet_graph1 := XLApp.ActiveSheet;
sheet_graph1.Name := 'Graph1';
// Create a Pivot Cache
myPivotCache := myActive_WorkBook.PivotCaches.Create(xlDatabase,'Raw Data!R1C1:R1048576C36',xlPivotTableVersion15);
// Create a Pivot table within the PivotCache
TabDestination := 'Graph1!R3C1';
myPivotTable := myPivotCache.CreatePivotTable(TabDestination, 'PivotTable1',xlPivotTableVersion15);
// Now start adding the fields...
f1 := myPivotTable.PivotFields('Fiscal Quarter');
f1.Orientation := xlRowField;
f1.Position := 1;
myPivotTable.PivotFields('#Clicks').orientation := xlDataField;
// myPivotTable.PivotFields('#Clicks').function := xlSum;
end;
【问题讨论】:
-
您如何准确地创建您的“#Clicks”数据透视字段?
-
@@MartynA - #Clicks 是原始数据表上数据列之一的名称/标题。该表的每一列都可以在 PivotCache/PivotTable 中访问(至少据我了解)。
-
附加信息:当我查看 Excel_TLB 文件时,它说 PivotTable.Function 已更改为 'PivotTable.Function_' 不幸的是,这对我没有帮助,但它可能是一个线索。
标签: excel delphi com pivot-table