delphi中如何实现柱状图

coderee 2009-03-01 09:51:14
请问各位高手,在delphi中如何实现数据导入execl然后形成柱状图(最好有源码和注释)
...全文
603 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lingyin55 2009-03-01
  • 打赏
  • 举报
回复
再贴一段代码,基本解释上面有了


procedure TForm1.ChartData;
var
ARange: Variant;
Sheets: Variant;
begin
XLApp.Workbooks[1].Sheets.Add(,,1,xlChart);
Sheets := XLApp.Sheets;
ARange := Sheets.Item['Delphi Data'].Range['A1:A10'];
Sheets.Item['Chart1'].SeriesCollection.Item[1].Values := ARange;
Sheets.Item['Chart1'].ChartType := xl3DPie;
Sheets.Item['Chart1'].SeriesCollection.Item[1].HasDataLabels := True;

XLApp.Workbooks[1].Sheets.Add(,,1,xlChart);
Sheets.Item['Chart2'].SeriesCollection.Item[1].Values := ARange;
Sheets.Item['Chart2'].SeriesCollection.Add(ARange);
Sheets.Item['Chart2'].SeriesCollection.NewSeries;
Sheets.Item['Chart2'].SeriesCollection.Item[3].Values :=
VarArrayOf([1,2,3,4,5, 6,7,8,9,10]);
Sheets.Item['Chart2'].ChartType := xl3DColumn;
end;

改變這個就行
Sheets.Item['Chart1'].ChartType := xl3DPie;
lingyin55 2009-03-01
  • 打赏
  • 举报
回复
http://delphi.ktop.com.tw/topic.asp?TOPIC_ID=41363
之前在站上看了許多 使用 OLE 來制作 Excel的文章,大部份都是在講如何填入資料,如何設定欄位的格式等,
小弟因工作需要,必須在excel中產生圖表,在網路上找了許多資料,也有了一些心得,
就在此拋磚引玉,提供一些小弟個人的心得,
因為站上很多如何填資料的文章,所以小弟就省略這一部份,
假設網友們已經填好資料,直接進入要產生圖表的部份,


//一開始先定義OLE會用到的變數,建立excel的物件
Variant Excel,Workbooks,Workbook,Charts,Chart,Range;
Excel=CreateOleObject("Excel.Application");
Excel.OlePropertySet("Visible",true); //秀出Excel的畫面
Workbooks=Excel.OlePropertyGet("Workbooks");
Workbook=Workbooks.OleFunction("Add");
Worksheets=Workbook.OlePropertyGet("Worksheets");
Worksheet=Worksheets.OleFunction("Add"); // 新增一worksheet
Worksheet.OlePropertySet("Name","test") ;// 設定worksheet 的名稱

//取得Charts的物件
Charts=Workbook.OlePropertyGet("Charts");
.
.
. 先把所需資料填入cell中
.
.

//建立一個新的圖表,這時圖表會開在一個新的sheet裡,而整個sheet就是一個圖表
//之後會把圖表放在其他的sheet裡
Chart=Charts.OleFunction("Add");

//設定圖表的格式,65是表示含有資料標記的折線圖,後面會有圖表格式的說明
Chart.OlePropertySet("ChartType",65);

//選定要製作圖表的資料來源,這個例子我是要選擇excel中從cell(1,1)到cell(10,5)的資料,
//此動作就好像用滑鼠把這一部份的欄位選起來一樣
Range=Worksheet.OlePropertyGet("Range",
Worksheet.OlePropertyGet("Cells",1,1),
Worksheet.OlePropertyGet("Cells",10,5));

//設定圖表的資料來源,xlRows表示資料是以列來做排列,如果資料是用行來排列,就用xlColumns,
//如果是用xlRows,選取範圍的第一列就是x軸每一筆資料的名稱,
//第一行是y軸資料的名稱,其餘的就是圖表裡的數值
Chart.OleProcedure("SetSourceData",Range,xlRows);

//設定圖表的title
Chart.OlePropertySet("HasTitle",(Variant)true); //先設定圖表有title
String Charttitle="test chart!!";
Chart.OlePropertyGet("ChartTitle").OlePropertySet("Text",Charttitle.c_str());

//設定圖表x軸和y軸是否要秀出title和資料名稱
Chart.OlePropertyGet("Axes",1).OlePropertySet("HasTitle",(Variant)true); //設定x軸是否要顯示資料名稱
Chart.OlePropertyGet("Axes",1).OlePropertyGet("AxisTitle").OlePropertySet("Text","時間");//設定x軸的title
Chart.OlePropertyGet("Axes",2).OlePropertySet("HasTitle",(Variant)true); //設定y軸是否要顯示資料名稱
Chart.OlePropertyGet("Axes",2).OlePropertyGet("AxisTitle").OlePropertySet("Text","次數");//設定y軸的title

//設定圖表要放在哪一個sheet裡

Chart.OleProcedure("Location",2,Worksheet.OlePropertyGet("Name"));

//設定圖表的位置與長寬,
//Worksheet.OlePropertyGet("ChartObjects",1)表示是要設定這個sheet中第一個圖表,
//如要設定第二個圖表就用Worksheet.OlePropertyGet("ChartObjects",2),
//圖表的順序依在sheet中產生或放置的先後排列

Worksheet.OlePropertyGet("ChartObjects",1).OlePropertySet("Top",15);
Worksheet.OlePropertyGet("ChartObjects",1).OlePropertySet("Left",20);
Worksheet.OlePropertyGet("ChartObjects",1).OlePropertyGet("Width",50);
Worksheet.OlePropertyGet("ChartObjects",1).OlePropertyGet("Height",30);

//此時圖表已經漂漂亮亮的在sheet中囉!


底下列出圖表格式常數的定義:
typedef enum XlChartType
{
xlColumnClustered = 51,
xlColumnStacked = 52,
xlColumnStacked100 = 53,
xl3DColumnClustered = 54,
xl3DColumnStacked = 55,
xl3DColumnStacked100 = 56,
xlBarClustered = 57,
xlBarStacked = 58,
xlBarStacked100 = 59,
xl3DBarClustered = 60,
xl3DBarStacked = 61,
xl3DBarStacked100 = 62,
xlLineStacked = 63,
xlLineStacked100 = 64,
xlLineMarkers = 65,
xlLineMarkersStacked = 66,
xlLineMarkersStacked100 = 67,
xlPieOfPie = 68,
xlPieExploded = 69,
xl3DPieExploded = 70,
xlBarOfPie = 71,
xlXYScatterSmooth = 72,
xlXYScatterSmoothNoMarkers = 73,
xlXYScatterLines = 74,
xlXYScatterLinesNoMarkers = 75,
xlAreaStacked = 76,
xlAreaStacked100 = 77,
xl3DAreaStacked = 78,
xl3DAreaStacked100 = 79,
xlDoughnutExploded = 80,
xlRadarMarkers = 81,
xlRadarFilled = 82,
xlSurface = 83,
xlSurfaceWireframe = 84,
xlSurfaceTopView = 85,
xlSurfaceTopViewWireframe = 86,
xlBubble = 15,
xlBubble3DEffect = 87,
xlStockHLC = 88,
xlStockOHLC = 89,
xlStockVHLC = 90,
xlStockVOHLC = 91,
xlCylinderColClustered = 92,
xlCylinderColStacked = 93,
xlCylinderColStacked100 = 94,
xlCylinderBarClustered = 95,
xlCylinderBarStacked = 96,
xlCylinderBarStacked100 = 97,
xlCylinderCol = 98,
xlConeColClustered = 99,
xlConeColStacked = 100,
xlConeColStacked100 = 101,
xlConeBarClustered = 102,
xlConeBarStacked = 103,
xlConeBarStacked100 = 104,
xlConeCol = 105,
xlPyramidColClustered = 106,
xlPyramidColStacked = 107,
xlPyramidColStacked100 = 108,
xlPyramidBarClustered = 109,
xlPyramidBarStacked = 110,
xlPyramidBarStacked100 = 111,
xlPyramidCol = 112,
xl3DColumn = 0xFFFFEFFC,
xlLine = 4,
xl3DLine = 0xFFFFEFFB,
xl3DPie = 0xFFFFEFFA,
xlPie = 5,
xlXYScatter = 0xFFFFEFB7,
xl3DArea = 0xFFFFEFFE,
xlArea = 1,
xlDoughnut = 0xFFFFEFE8,
xlRadar = 0xFFFFEFC9
} XlChartType;

小弟嘗試的結果,列出部份常數的意思,其餘的就看有沒有人補充囉!

5:2D的圓形圖(Pie圖)
16:泡泡圖
51:2D的直條圖
52:2D的堆疊直條圖
53:2D的100%堆疊直條圖
54:3D的直條圖
55:3D的堆疊直條圖
56:3D的100%堆疊直條圖
57:2D的橫條圖
58:2D的堆疊橫條圖
59:2D的100%堆疊橫條圖
60:3D的橫條圖
61:3D的堆疊橫條圖
62:3D的100%堆疊橫條圖
63:折線圖
65:含有資料標誌的折線圖

接下來設定EXCEL的背景圖案


String BmpPath;
BmpPath="C:\\background.bmp";
if(FileExists(BmpPath))
Worksheet.OleFunction("SetBackgroundPicture",BmpPath.c_str());

5,387

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧