Delphi 10 / Seattle,Excel 2013.我正在为Excel编写一个插件(使用AddIn Express)。我需要做的一件事是创建一系列Excel数据透视表/数据透视表。我在Excel中记录了宏,所以我有VBA代码来做我想要的。我的挑战是把它移植到德尔福。
我的代码编译,当我单步执行时,最后一行给出了错误。方法' SetSourceData' Automation Object不支持。仅供参考 - XLApp是Excel应用程序的变量点。
procedure TMyTemplateForm.Pivot_TouchesByQuarter;
var
myPivotCache: OleVariant;
myActive_WB : OleVariant;
MyChart : OleVariant;
ChartSourceRange : OleVariant;
TabDestination : string;
begin
// Add the new Sheet
XLApp.Connect;
myActive_WB := 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'; // CANNOT CONTAIN SPACES.. ?????
// Parameters: SourceType, SourceData, Version
// Doc at: https://msdn.microsoft.com/en-us/library/office/ff839430.aspx
myPivotCache := myActive_WB.PivotCaches.Create(xlDatabase,'Raw Data!R1C1:R1048576C36',xlPivotTableVersion15);
// Parameters: TableDestination, TableName, DefaultVersion
TabDestination := 'Graph1!R3C1';
myPivotCache.CreatePivotTable(TabDestination, 'PivotTable1',xlPivotTableVersion15);
// Select where we want this placed...
sheet_Graph1.Cells.Item[3, 1].Select;
// https://msdn.microsoft.com/en-us/library/office/jj228277.aspx
// Create the chart object
myChart := sheet_Graph1.Shapes.AddChart2(201, xlColumnClustered);
// Define the Range that is the source for the chart. This is the Pivot Table I created just above
ChartSourceRange := sheet_Graph1.Range['Graph1!$A$3:$C$20'];
// Tell the Pivot Chart to use the Chart Range
myChart.SetSourceData(ChartSourceRange);
end;
为什么我收到此错误?作为一个相关问题,我可以将我的Chart Source指向PivotTable1对象吗?现在,它被硬编码到特定的单元格位置,但根据数据,我的数据透视表可能比从第3行到第20行更大。
如果它有帮助,VBA宏代码(最后2行)是..
ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
ActiveChart.SetSourceData Source:=Range("Sheet1!$A$3:$C$20")
答案 0 :(得分:2)
我找到了答案。而不是
// Tell the Pivot Chart to use the Chart Range
myChart.SetSourceData(ChartSourceRange)
代码应该是
myChart.chart.SetSourceData(ChartSourceRange);