2

我需要在 delphi 程序的 excel 页面中创建一个 excel 图表。

我在到达线路时收到“未找到成员”错误。

ch1.Chart.SeriesCollection.Item[0].Values := Sheets.Item['Delphi Data'].Range['E5:E15'];

你能帮我解决吗

下面给出的是使用的代码。

procedure TForm1.ChartData;
var
     ARange,Sheets,ch1 : Variant; 
     SSeries : Series; 
     num : integer; 
     ChartAxis : Axis; 
     lcid :  Cardinal; 
begin 
  ch1 := XLApp.ActiveWorkBook.Sheets[1].ChartObjects.Add ( 500,100,400,200 ); // creates a new chart in the specified 
  Sheets := XLApp.Sheets; 
  ch1.Chart.ChartWizard ( 
                         Sheets.Item['Delphi Data'].Range['D5:D15'],   // 1  Source 
                         xlBarStacked, //  2  The chart type. 
                         8,            //  3  Format  
                         2,            //  4  PlotBy  
                         8,            //  5  CategoryLabels  
                         3,            //  6  SeriesLabels  
                         True,        //  7  HasLegend - 'true' to include a legend. 
                         'Sijos Report',  // 8  Title - The Chart control title text. 
                         'Y Legend',      // 9  CategoryTitle - The category axis title text. 
                         'X Legend',      // 10  ValueTitle - The value axis title text 
                         2                // 11  ExtraTitle - The series axis title for 3-D charts or the second value axis title for 2-D charts. 
                       ); 
ch1.Chart.SetSourceData(Sheets.Item['Delphi Data'].Range['D5:D15'],xlColumns); 

ch1.Chart.SeriesCollection.Item[0].Values := Sheets.Item['Delphi Data'].Range['E5:E15']; 
ch1.Chart.SeriesCollection.Item[0].XValues := Sheets.Item['Delphi Data'].Range['F5:F15'];  
End;
4

1 回答 1

4

我认为您需要ch1.Chart.SeriesCollection(1)而不是ch1.Chart.SeriesCollection.Item[0]因为 Excel 使用基于 1 的索引。

我也无法获取您的代码,在访问系列对象时使用后期绑定的 COM 来工作。但是,如果您切换到使用早期绑定的 COM,那就没问题了。例如,您需要将 Excel2000 添加到您的 uses 子句中。

var
  S: Series;
....
S := IUnknown(ch1.Chart.SeriesCollection(1)) as Series;
S.Values := Sheets.Item['Delphi Data'].Range['E5:E15']; 
S.XValues := Sheets.Item['Delphi Data'].Range['F5:F15'];  

如果我是你,我会将整个代码切换到早期绑定。

我认为您的代码基于Charlie Calvert 的这个 Delphi 3 示例。我无法让它在我的 Delphi 6 上工作。也许 Delphi 改变了。也许 Excel 发生了变化。无论如何,让它对我有用的是切换到早期绑定的 COM。

于 2012-04-20T11:17:54.027 回答