2

デルファイプログラムの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

Excelは1ベースのインデックスを使用しているので、必要ch1.Chart.SeriesCollection(1)ではないと思います。ch1.Chart.SeriesCollection.Item[0]

また、シリーズオブジェクトにアクセスするときに、レイトバウンドCOMを使用してコードを取得できませんでした。ただし、アーリーバウンドCOMの使用に切り替える場合は、問題ありません。たとえば、uses句にExcel2000を追加する必要があります。

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'];  

もし私があなたなら、コード全体をアーリーバウンドに切り替えます。

あなたのコードは、CharlieCalvertによるこのDelphi3の例に基づいていると思います。Delphi6でそれを機能させることができませんでした。おそらくDelphiが変更されました。おそらくExcelが変更されました。とにかく、私にとってそれを機能させたのは、アーリーバウンドCOMに切り替えることでした。

于 2012-04-20T11:17:54.027 に答える