【发布时间】:2021-11-01 19:41:53
【问题描述】:
我正在编写代码来创建 Excel 数据透视图,但没有可见的数据透视表。显然,我无法通过 Excel_TLB 执行此操作(根据 Stackoverflow 上的另一个问题),因此我使用的是 ComObj 和 Excel2010。我的代码成功创建了数据透视图。我现在正在尝试设置某些过滤器。我已经捕获了相关的 VBA 代码,但我无法将其转换为 Delphi。 VBA 代码是
ActiveChart.PivotLayout.PivotTable.PivotFields( _
"[Range].[Revenue Type Group].[Revenue Type Group]").VisibleItemsList = Array( _
"[Range].[Revenue Type Group].&[NEW]", _
"[Range].[Revenue Type Group].&[WORKLOAD]")
我的 Delphi 代码(只设置一个值)是
XLApp.ActiveWorkbook.ActiveChart.PivotLayout.PivotTable.PivotFields['[Range].[Revenue Type Group].[Revenue Type Group]'].VisibleItemsList[1] := '[Range].[Revenue Type Group].&[NEW]';
虽然我可以编译,但在运行时出现“不支持集合”异常。
我在 MS VBA 文档中没有看到任何奇怪的地方... https://docs.microsoft.com/en-us/office/vba/api/excel.pivotfield.visibleitemslist
我也尝试过使用动态数组,例如
SetLength(A1, 1);
A1[0] := '[Range].[Revenue Type Group].&[NEW]';
XLApp.ActiveWorkbook.ActiveChart.PivotLayout.PivotTable.PivotFields['[Range].[Revenue Type Group].[Revenue Type Group]'].VisibleItemsList := A1;
这将不会编译,并出现错误“在 Variant Dispatch 调用中不允许使用类型。 我尝试将 A1 定义为字符串数组、变量数组和 Olevariant 数组。
任何想法表示赞赏。
【问题讨论】:
-
PivotFields是一种方法,而不是数组属性。 -
Oliver - ShowMessage(XLApp.ActiveWorkbook.ActiveChart.PivotLayout.PivotTable.PivotFields['[Range].[Revenue Type Group].[Revenue Type Group]'].Name);按预期工作和显示,所以我认为 PivotFields 语法不是问题。
-
也许你需要使用
VarArrayCreate()(见this)。 -
如果问题包含minimal reproducible example会更容易回答。
-
@Olivier - VarArrayCreate 成功了。提交作为答案,我会接受。
标签: excel vba delphi delphi-10.3-rio