Delphi 生成excel中的餅圖

生成excel中的餅圖excel

 

varcode

  i,j,m,n,count1:integer;orm

  str:string;對象

  Jdate:tdatetime;get

  channellist,potBstrtime,potEstrtime,Jchannelname:string;string

  Rres:boolean;it

  JSHR:double;io

 

  Excelid,achart1,cell1,cell2,cell3,cell4,cellMiddle,Range1,Range2,series1:variant;object

  ExRowsValue,ExRowsName,ExClos:Integer;date

  ImagePage,dataPage:integer;

  leftPostion,topPostion,widthPostion,heightPostion:integer;

begin

  //建立OLE對象

  try

    Excelid:=CreateOleObject( 'Excel.Application' );

  except

    on Exception do raise exception.Create('沒法建立Xls文件,請確認是否安裝EXCEL')

  end;

 

  Excelid.Visible := false; //Excel顯示設置

  Excelid.WorkBooks.Add;  //生成新的excel文件

  //不用excel之前的頁

 

  Excelid.worksheets.add;

  dataPage:=Excelid.Worksheets.count;   //用做數據頁

  Excelid.worksheets.add;

  ImagePage:=Excelid.Worksheets.count;

  //showmessage(inttostr(dataPage));

  //showmessage(inttostr(ImagePage)+'sdfg');

  Jdate:=DateTimePicker1.Date;

  count1:=0;

  ExRowsValue:=1; //存儲值

  ExRowsName:=2;  //存儲名稱

  //取得頻率編號

  for i:=0 to CheckListBoxFQ.Items.Count-1 do

  begin

    if CheckListBoxFQ.Checked[i] then

    begin

     channellist:= QCaky.FChannelList[i]+','+channellist;

    end;

  end;

  delete(channellist,length(channellist),1);

  leftPostion:=20;

  topPostion:=50;

  widthPostion:=450;

  heightPostion:=230;

 

  for i:=0 to CheckListBoxPOTT.Items.Count-1 do

  begin

    if CheckListBoxPOTT.Checked[i] then

    begin

      //動態生成excel頁數

 

      //Excelid.worksheets.add;

      //sheetCount:=sheetCount+1;

      //Excelid.worksheets[sheetCount].name:='圖表頁'+inttostr(sheetCount);

      //在這裏生成圖表

      if CheckListBoxPOTT.Items[i]='全天' then

      begin

        potBstrtime:='';

        potEstrtime:='';

      end

      else

      begin

        potBstrtime:=QCaky.FPOTbeginList[i];

        potEstrtime:=QCaky.FPOTendList[i];

      end;

      Rres:=QCaky.getFQShr(Jdate,FormMain.QAreacode,channellist,potBstrtime,potEstrtime);  //取得佔有率

      ExClos:=1;

      while not QCaky.FADOQueryFQ.Eof do

      begin

        Excelid.worksheets[dataPage].Activate;

        Jchannelname:=QCaky.FADOQueryFQ.fieldbyname('channelname').AsString;

        JSHR:=QCaky.FADOQueryFQ.fieldbyname('allshr').AsFloat;

        Excelid.worksheets[dataPage].Cells[ExRowsName,ExClos].Value :=Jchannelname;

        Excelid.worksheets[dataPage].Cells[ExRowsValue,ExClos].Value :=JSHR;

        inc(ExClos);

        QCaky.FADOQueryFQ.Next;

      end;

       {添加一個二維圖(20,50,450,230)表示(左,頂,寬,高)}

      //achart1 := Excelid.worksheets[ImagePage].chartobjects.add(20,50,450,230);

      achart1 := Excelid.worksheets[ImagePage].chartobjects.add(leftPostion,topPostion,widthPostion,heightPostion);

 

      achart1.chart.charttype := xl3DPie ;  //生成何種類型的圖********在今生成的是餅圖

 

 

      //設置x軸、y軸數據

      cell1 :=  Excelid.worksheets[dataPage].Cells[ExRowsName,1];

      cell2 :=  Excelid.worksheets[dataPage].Cells[ExRowsName,ExClos];

      cell3 :=  Excelid.worksheets[dataPage].Cells[ExRowsValue,1];

      cell4 :=  Excelid.worksheets[dataPage].Cells[ExRowsValue,ExClos];

 

      Range1 := Excelid.worksheets[dataPage].Range[cell1, cell2]; //設定Chart類別座標軸(x軸)的取值區域

 

      Range2 := Excelid.worksheets[dataPage].Range[cell3, cell4]; //設定Chart數值座標軸(y軸)的取值區域

 

      series1:= achart1.chart.seriescollection ;

      //series1.add (Range2,xlColumns,false);  //設置y軸的數據

      series1.add (Range2,true);          //能夠使用,可以生成餅圖

      achart1.chart.seriescollection[1].name:='nihao';

      //設置餅圖的形式

      achart1.chart.seriescollection[1].ApplyDataLabels(xlDataLabelsShowLabelAndPercent,true,true,true);

      achart1.Chart.Axes[xlCategory].CategoryNames := Range1;  //設置x軸數據

 

      //series1.add (Range2,xlColumns,false);  //設置y軸的數據

      //achart1.Chart.Axes[xlCategory].CategoryNames := Range1;  //設置x軸數據

 

 

      //刪除右側的標題

      achart1.Chart.Legend.delete;

 

      //添加圖表標題

      achart1.Chart.HasTitle:=True;

      achart1.Chart.ChartTitle.Characters.Text:='收視率走勢圖';

      achart1.Chart.HasLegend:=true;

      achart1.Chart.Legend.Position := xlBottom;

 

      //圖表左標說明

      //achart1.Chart.Axes(xlValue,xlPrimary).HasTitle := True;

      //achart1.Chart.Axes(xlValue,xlPrimary).AxisTitle.Characters.Text := '收視率(%)';

 

      //圖表下標說明

      //achart1.Chart.Axes(xlCategory,xlPrimary).HasTitle:=True;

      //achart1.Chart.Axes(xlCategory,xlPrimary).AxisTitle.Characters.Text:='時間';

 

      ExRowsName:=ExRowsName+2;

      ExRowsValue:=ExRowsValue+2;

    end;  //若是時段設置被選中

    leftPostion:=20;

    topPostion:=topPostion+600;

 

 

 

 

    //showmessage(inttostr(dataPage));

  end;

  Excelid.Visible := true;

end;

相關文章
相關標籤/搜索