阿也 發表於 2013-8-19 16:09:35

Delphi 生成excel中饼图的实例代码

<div class="codetitle"><span><U>复制代码</U></span> 代码如下:</div><div class="codebody" id="code32050"><BR>var<BR>&nbsp; i,j,m,n,count1:integer;<BR>&nbsp; str:string;<BR>&nbsp; Jdate:tdatetime;<BR>&nbsp; channellist,potBstrtime,potEstrtime,Jchannelname:string;<BR>&nbsp; Rres:boolean;<BR>&nbsp; JSHR:double;<BR>&nbsp; Excelid,achart1,cell1,cell2,cell3,cell4,cellMiddle,Range1,Range2,series1:variant;<BR>&nbsp; ExRowsValue,ExRowsName,ExClos:Integer;<BR>&nbsp; ImagePage,dataPage:integer;<BR>&nbsp; leftPostion,topPostion,widthPostion,heightPostion:integer;<BR>begin<BR>&nbsp; //创建OLE对象<BR>&nbsp; try<BR>&nbsp;&nbsp;&nbsp; Excelid:=CreateOleObject( 'Excel.Application' );<BR>&nbsp; except<BR>&nbsp;&nbsp;&nbsp; on Exception do raise exception.Create('无法创建Xls文件,请确认是否安装EXCEL')<BR>&nbsp; end;<BR>&nbsp; Excelid.Visible := false; //Excel显示设置<BR>&nbsp; Excelid.WorkBooks.Add;&nbsp; //生成新的excel文件<BR>&nbsp; //不用excel以前的页<BR>&nbsp; Excelid.worksheets.add;<BR>&nbsp; dataPage:=Excelid.Worksheets.count;&nbsp;&nbsp; //用作数据页<BR>&nbsp; Excelid.worksheets.add;<BR>&nbsp; ImagePage:=Excelid.Worksheets.count;<BR>&nbsp; //showmessage(inttostr(dataPage));<BR>&nbsp; //showmessage(inttostr(ImagePage)+'sdfg');<BR>&nbsp; Jdate:=DateTimePicker1.Date;<BR>&nbsp; count1:=0;<BR>&nbsp; ExRowsValue:=1; //存储值<BR>&nbsp; ExRowsName:=2;&nbsp; //存储名称<BR>&nbsp; //取得频率编号<BR>&nbsp; for i:=0 to CheckListBoxFQ.Items.Count-1 do<BR>&nbsp; begin<BR>&nbsp;&nbsp;&nbsp; if CheckListBoxFQ.Checked then<BR>&nbsp;&nbsp;&nbsp; begin<BR>&nbsp;&nbsp;&nbsp;&nbsp; channellist:= QCaky.FChannelList+','+channellist;<BR>&nbsp;&nbsp;&nbsp; end;<BR>&nbsp; end;<BR>&nbsp; delete(channellist,length(channellist),1);<BR>&nbsp; leftPostion:=20;<BR>&nbsp; topPostion:=50;<BR>&nbsp; widthPostion:=450;<BR>&nbsp; heightPostion:=230;<BR>&nbsp; for i:=0 to CheckListBoxPOTT.Items.Count-1 do<BR>&nbsp; begin<BR>&nbsp;&nbsp;&nbsp; if CheckListBoxPOTT.Checked then<BR>&nbsp;&nbsp;&nbsp; begin<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //动态生成excel页数<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Excelid.worksheets.add;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sheetCount:=sheetCount+1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Excelid.worksheets.name:='图表页'+inttostr(sheetCount);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //在这里生成图表<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if CheckListBoxPOTT.Items='全天' then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; potBstrtime:='';<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; potEstrtime:='';<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; potBstrtime:=QCaky.FPOTbeginList;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; potEstrtime:=QCaky.FPOTendList;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Rres:=QCaky.getFQShr(Jdate,FormMain.QAreacode,channellist,potBstrtime,potEstrtime);&nbsp; //取得占有率<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExClos:=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while not QCaky.FADOQueryFQ.Eof do<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Excelid.worksheets.Activate;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jchannelname:=QCaky.FADOQueryFQ.fieldbyname('channelname').AsString;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JSHR:=QCaky.FADOQueryFQ.fieldbyname('allshr').AsFloat;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Excelid.worksheets.Cells.Value :=Jchannelname;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Excelid.worksheets.Cells.Value :=JSHR;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inc(ExClos);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; QCaky.FADOQueryFQ.Next;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {添加一个二维图(20,50,450,230)表示(左,顶,宽,高)}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //achart1 := Excelid.worksheets.chartobjects.add(20,50,450,230);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; achart1 := Excelid.worksheets.chartobjects.add(leftPostion,topPostion,widthPostion,heightPostion);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; achart1.chart.charttype := xl3DPie ;&nbsp; //生成何种类型的图********在此生成的是饼图<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置x轴、y轴数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cell1 :=&nbsp; Excelid.worksheets.Cells;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cell2 :=&nbsp; Excelid.worksheets.Cells;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cell3 :=&nbsp; Excelid.worksheets.Cells;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cell4 :=&nbsp; Excelid.worksheets.Cells;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Range1 := Excelid.worksheets.Range; //设定Chart类别坐标轴(x轴)的取值区域<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Range2 := Excelid.worksheets.Range; //设定Chart数值坐标轴(y轴)的取值区域<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; series1:= achart1.chart.seriescollection ;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //series1.add (Range2,xlColumns,false);&nbsp; //设置y轴的数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; series1.add (Range2,true);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //可以使用,能够生成饼图<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; achart1.chart.seriescollection.name:='nihao';<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置饼图的形式<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; achart1.chart.seriescollection.ApplyDataLabels(xlDataLabelsShowLabelAndPercent,true,true,true);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; achart1.Chart.Axes.CategoryNames := Range1;&nbsp; //设置x轴数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //series1.add (Range2,xlColumns,false);&nbsp; //设置y轴的数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //achart1.Chart.Axes.CategoryNames := Range1;&nbsp; //设置x轴数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //删除右侧的标题<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; achart1.Chart.Legend.delete;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //添加图表标题<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; achart1.Chart.HasTitle:=True;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; achart1.Chart.ChartTitle.Characters.Text:='收视率走势图';<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; achart1.Chart.HasLegend:=true;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; achart1.Chart.Legend.Position := xlBottom;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //图表左标说明<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //achart1.Chart.Axes(xlValue,xlPrimary).HasTitle := True;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //achart1.Chart.Axes(xlValue,xlPrimary).AxisTitle.Characters.Text := '收视率(%)';<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //图表下标说明<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //achart1.Chart.Axes(xlCategory,xlPrimary).HasTitle:=True;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //achart1.Chart.Axes(xlCategory,xlPrimary).AxisTitle.Characters.Text:='时间';<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExRowsName:=ExRowsName+2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExRowsValue:=ExRowsValue+2;<BR>&nbsp;&nbsp;&nbsp; end;&nbsp; //如果时段设置被选中<BR>&nbsp;&nbsp;&nbsp; leftPostion:=20;<BR>&nbsp;&nbsp;&nbsp; topPostion:=topPostion+600;<BR>&nbsp;&nbsp;&nbsp; //showmessage(inttostr(dataPage));<BR>&nbsp; end;<BR>&nbsp; Excelid.Visible := true;<BR>end;<BR></div>
                           
                            <div class="art_xg">
                              <b>您可能感兴趣的文章:</b><ul><li>python开发的小球完全弹性碰撞游戏代码</li><li>Delphi实现毫秒级别的倒计时实例代码</li><li>截取指定符号之间的字符串(随机读取)delphi实例代码</li><li>C# 调用Delphi dll 实例代码</li><li>Delphi修改操作注册表权限的代码</li><li>DELPHI7.0 获取硬盘、CPU、网卡序列号的代码</li><li>C#定义并实现单链表实例解析</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: Delphi 生成excel中饼图的实例代码