簡易的用Delphi畫圖表範例

 

uses ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var
  i, j: integer;

  ExcelApp: Variant;
  cellrange:String;
const
  xlValue = 2;
  xlSecondary = 2;
  xlTickLabelPositionNone = -4142;
begin
  try
    ExcelApp := CreateOleObject('Excel.Application');
    ExcelApp.Visible := false;
    ExcelApp.Caption := 'Application use Microsoft Excel';
    ExcelApp.WorkBooks.Add;

    for i := 1 to 9 do
      for j := 1 to 9 do
        ExcelApp.Cells[i,j+1] := IntToStr(i*j);
    for i := 1 to 9 do
      ExcelApp.Cells[i,1] := 'A' + IntToStr(i);

    cellrange:='=工作表1!$A$1:$B$9';

    ExcelApp.ActiveSheet.ChartObjects.add(300, 30, 600, 280);
    ExcelApp.ActiveSheet.ChartObjects(1).Activate; //激活圖表
    ExcelApp.ActiveSheet.ChartObjects(1).Chart.seriescollection.ADD(cellrange); //建立新數例
    ExcelApp.ActiveSheet.chartobjects(1).chart.hastitle := true;

    ExcelApp.ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Name := '';

    ExcelApp.ActiveWorkBook.SaveAs('C:\Users\User\Desktop\' + FormatDateTime('HHNNSS', Now) + '.xlsx'); //存檔

    ExcelApp.ActiveWorkBook.Saved := True; //要save 不然會跳視窗
  finally
    ExcelApp.WorkBooks.Close;
    ExcelApp.Quit;
    VarClear(ExcelApp);
    ExcelApp:=unassigned;
  end;
  ShowMessage('Finish');
end;

 

這裡要注意的幾點

ExcelApp.ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Name := '';

網路上找到的文章 都是 [ ]

用[ ] 會跳 找不到物件 所以請使用( )

不知道是不是Excel版本的關係(我的版本是2013)

 

另外 實測發現

先跑資料 最後在加圖表 效率較高

若先加圖表 在跑資料 畫面上會有一個Excel圖表右上角的 + 一直閃

然後迴圈就跑超慢..

arrow
arrow
    文章標籤
    Delphi Ole Excel Chart
    全站熱搜

    抓狂小白 發表在 痞客邦 留言(0) 人氣()