如何使用Delphi控制Excel
1 创建Excel文件
要在Delphi中控制Excel,就必须用到OLE自动化。现在一般采用OLE2来创建OLE对象,当激活一个OLE对象时,服务器程序仅在容器程序内部激活,这就是所谓的“就地激活”(in-place activation)。
创建Excel文件时,先创建一个OLE对象,然后在对象中建立工作表worksheet,如函数createExcel所示:
function createExcel:variant;
var
v:variant;
sheet:variant;
begin
v:=createoleobject('Excel.Application');//创建OLE对象
v.visible:=true;
v.workbooks.add(-4167); //添加工作表
v.workbooks[1].sheets[1].name:='test';
sheet:=v.workbooks[1].sheets['test'];
return v;
end;
2 数据表格控制
Excel表格的控制,主要包括数据的导入、修改;单元格的合并、边框的控制;表格的复制、粘贴等。当报表格式一定的情况下,表格的复制、粘贴显得尤为重要,这样,可以先制作一个文件模板,然后按照实际需要输出多页报表即可。
(1)数据的导入(importData)
procedure importData;
var
I,j:integer;
v:variant;
begin
v:=createExcel; //创建Excel文件test
for I:=0 to maxcolumn do
begin
for j:=0 to maxrow do
v.workbooks[1].sheets[1].cells[I,j]:=I*j; //导入数据
end;
end;
(2)单元格的合并、边框的控制(lineStylecontrol)
单元格的合并,是在选定合并范围的情况下进行的。边框控制可以操作边框线条的是否显示。其他方式的控制,可以仿照下面过程进行。
procedure lineStylecontrol;
var
v,sheet,range:variant;
begin
v:=createExecl;
sheet:= v.workbooks[1].sheets[1];
range:=sheet.range[sheet.cells[1,1],sheet.cells[39,30]];//选定表格
range.select;
range.merge; //合并单元格
range.borders.linestyle:=xlcontinuous; //置边框线可见
range.font.size:=9; //改变表格内文本字体大小
end;
4.實例
procedure TForm1.Button1Click(Sender: TObject);
var Cell1, Cell2, Cell3, Cell4, Range1, Range2: Variant;
ExcelApplication, Sheet1: Variant;
begin
try
ExcelApplication := CreateOleObject('Excel.Application');
except
Showmessage('Sorry,No Excel');
abort;
end;
ExcelApplication.Visible := true;
ExcelApplication.Workbooks.Add(xlWBatWorkSheet);
Sheet1 := ExcelApplication.Workbooks[1].Worksheets['sheet1'];
Sheet1.Name := 'Delphi控制Excel Chart';
Sheet1.Cells.item[1, 1] := 'Excel Chart -范例';
Sheet1.Cells.item[2, 1] := '星期';
Sheet1.Cells.item[2, 2] := '星期一';
Sheet1.Cells.item[2, 3] := '星期二';
Sheet1.Cells.item[2, 4] := '星期三';
Sheet1.Cells.item[2, 5] := '星期四';
Sheet1.Cells.item[2, 6] := '星期五-';
Sheet1.Cells.item[2, 7] := '星期六';
Sheet1.Cells.item[2, 8] := '星期日';
Sheet1.Cells.item[3, 1] := '銷售量';
Sheet1.Cells.item[3, 2] := 115;
Sheet1.Cells.item[3, 3] := 112;
Sheet1.Cells.item[3, 4] := 156;
Sheet1.Cells.item[3, 5] := 148;
Sheet1.Cells.item[3, 6] := 132;
Sheet1.Cells.item[3, 7] := 196;
Sheet1.Cells.item[3, 8] := 162;
Cell1 := Sheet1.Cells.item[2, 2];
Cell2 := Sheet1.Cells.item[2, 8];
Cell3 := Sheet1.Cells.item[3, 2];
Cell4 := Sheet1.Cells.item[3, 8];
Range1 := sheet1.Range[cell1, cell2]; //設定Chart類別座標軸的取值范圍
Range2 := sheet1.Range[cell3, cell4]; //設定Chart數值座標軸的取值范圍
Range1.Borders.Color := 27;
Range2.Borders.Color := 6;
//向工作表中添加內嵌圖表﹐Add方法中的四個參數分別表示與儲存格A1的左邊距﹑頂部邊距﹑以及圖表的寬度and高度﹔
Sheet1.ChartObjects.add(10, 60, 500, 280);
sheet1.ChartObjects[1].Activate; //激活當前圖表
sheet1.ChartObjects[1].Chart.charttype := xl3DColumnClustered; //指定圖表類型﹕立體叢集直條圖
sheet1.ChartObjects[1].Chart.seriescollection.ADD[Range2]; //建立新數例
sheet1.ChartObjects[1].Chart.seriescollection[1].values := Range2; //指定新數例值
sheet1.ChartObjects[1].Chart.seriesCollection[1].hasdatalabels := True; //顯示圖表中數列的資料標簽﹔
sheet1.ChartObjects[1].Chart.Axes[xlValue].MinimumScale := 100; //設定數值座標軸的最小刻度值﹔
sheet1.ChartObjects[1].Chart.Axes[xlValue].MaximumScale := 200; //設定數值座標軸的最大刻度值﹔
sheet1.ChartObjects[1].Chart.Axes[xlValue].MajorUnit := 10; //設定數值座標的主要單位﹔
sheet1.ChartObjects[1].Chart.Axes[xlValue].MinorUnit := 10; //設定數值座標的次要單位﹔
sheet1.ChartObjects[1].Chart.Axes[xlCategory].HasTitle := True;
sheet1.ChartObjects[1].Chart.Axes[xlCategory].AxisTitle.Text := '星期'; //類別座標軸標簽。
sheet1.ChartObjects[1].Chart.Axes[xlCategory].CategoryNames := Range1;
sheet1.ChartObjects[1].Chart.HasLegend := false; //不顯示圖例