`

delphi 控制 excel,创建报表

 
阅读更多
http://www.delphibbs.com/keylife/iblog_show.asp?xid=11659

一) 使用动态创建的方法

首先创建 Excel 对象,使用ComObj:
var ExcelApp: Variant;
ExcelApp := CreateOleObject( 'Excel.Application' );

1) 显示当前窗口:
ExcelApp.Visible := True;

2) 更改 Excel 标题栏:
ExcelApp.Caption := '应用程序调用 Microsoft Excel';

3) 添加新工作簿:
ExcelApp.WorkBooks.Add;

4) 打开已存在的工作簿:
ExcelApp.WorkBooks.Open( 'C:/Excel/Demo.xls' );

5) 设置第2个工作表为活动工作表:
ExcelApp.WorkSheets[2].Activate;

ExcelApp.WorksSheets[ 'Sheet2' ].Activate;

6) 给单元格赋值:
ExcelApp.Cells[1,4].Value := '第一行第四列';

7) 设置指定列的宽度(单位:字符个数),以第一列为例:
ExcelApp.ActiveSheet.Columns[1].ColumnsWidth := 5;

8) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
ExcelApp.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米

9) 在第8行之前插入分页符:
ExcelApp.WorkSheets[1].Rows.PageBreak := 1;

10) 在第8列之前删除分页符:
ExcelApp.ActiveSheet.Columns[4].PageBreak := 0;

11) 指定边框线宽度:
ExcelApp.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;
1-左 2-右 3-顶 4-底 5-斜( / ) 6-斜( / )

12) 清除第一行第四列单元格公式:
ExcelApp.ActiveSheet.Cells[1,4].ClearContents;

13) 设置第一行字体属性:
ExcelApp.ActiveSheet.Rows[1].Font.Name := '隶书';
ExcelApp.ActiveSheet.Rows[1].Font.Color := clBlue;
ExcelApp.ActiveSheet.Rows[1].Font.Bold := True;
ExcelApp.ActiveSheet.Rows[1].Font.UnderLine := True;

14) 进行页面设置:

a.页眉:
ExcelApp.ActiveSheet.PageSetup.CenterHeader := '报表演示';
b.页脚:
ExcelApp.ActiveSheet.PageSetup.CenterFooter := '第&P页';
c.页眉到顶端边距2cm:
ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
d.页脚到底端边距3cm:
ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
e.顶边距2cm:
ExcelApp.ActiveSheet.PageSetup.TopMargin := 2/0.035;
f.底边距2cm:
ExcelApp.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
g.左边距2cm:
ExcelApp.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
h.右边距2cm:
ExcelApp.ActiveSheet.PageSetup.RightMargin := 2/0.035;
i.页面水平居中:
ExcelApp.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
j.页面垂直居中:
ExcelApp.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
k.打印单元格网线:
ExcelApp.ActiveSheet.PageSetup.PrintGridLines := True;

15) 拷贝操作:

a.拷贝整个工作表:
ExcelApp.ActiveSheet.Used.Range.Copy;
b.拷贝指定区域:
ExcelApp.ActiveSheet.Range[ 'A1:E2' ].Copy;
c.从A1位置开始粘贴:
ExcelApp.ActiveSheet.Range.[ 'A1' ].PasteSpecial;
d.从文件尾部开始粘贴:
ExcelApp.ActiveSheet.Range.PasteSpecial;

16) 插入一行或一列:
a. ExcelApp.ActiveSheet.Rows[2].Insert;
b. ExcelApp.ActiveSheet.Columns[1].Insert;

17) 删除一行或一列:
a. ExcelApp.ActiveSheet.Rows[2].Delete;
b. ExcelApp.ActiveSheet.Columns[1].Delete;

18) 打印预览工作表:
ExcelApp.ActiveSheet.PrintPreview;

19) 打印输出工作表:
ExcelApp.ActiveSheet.PrintOut;

20) 工作表保存:
if not ExcelApp.ActiveWorkBook.Saved then
ExcelApp.ActiveSheet.PrintPreview;

21) 工作表另存为:
ExcelApp.SaveAs( 'C:/Excel/Demo1.xls' );

22) 放弃存盘:
ExcelApp.ActiveWorkBook.Saved := True;

23) 关闭工作簿:
ExcelApp.WorkBooks.Close;

24) 退出 Excel:
ExcelApp.Quit;

(二) 使用Delphi 控件方法
在Form中分别放入ExcelApplication, ExcelWorkbook和ExcelWorksheet。

1) 打开Excel
ExcelApplication1.Connect;

2) 显示当前窗口:
ExcelApplication1.Visible[0]:=True;

3) 更改 Excel 标题栏:
ExcelApplication1.Caption := '应用程序调用 Microsoft Excel';

4) 添加新工作簿:
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0));

5) 添加新工作表:
var Temp_Worksheet: _WorkSheet;
begin
Temp_Worksheet:=ExcelWorkbook1.
WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) as _WorkSheet;
ExcelWorkSheet1.ConnectTo(Temp_WorkSheet);
End;

6) 打开已存在的工作簿:
ExcelApplication1.Workbooks.Open (c:/a.xls
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,0)

7) 设置第2个工作表为活动工作表:
ExcelApplication1.WorkSheets[2].Activate; 或
ExcelApplication1.WorksSheets[ 'Sheet2' ].Activate;

8) 给单元格赋值:
ExcelApplication1.Cells[1,4].Value := '第一行第四列';

9) 设置指定列的宽度(单位:字符个数),以第一列为例:
ExcelApplication1.ActiveSheet.Columns[1].ColumnsWidth := 5;

10) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
ExcelApplication1.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米

11) 在第8行之前插入分页符:
ExcelApplication1.WorkSheets[1].Rows.PageBreak := 1;

12) 在第8列之前删除分页符:
ExcelApplication1.ActiveSheet.Columns[4].PageBreak := 0;

13) 指定边框线宽度:
ExcelApplication1.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;
1-左 2-右 3-顶 4-底 5-斜( / ) 6-斜( / )

14) 清除第一行第四列单元格公式:
ExcelApplication1.ActiveSheet.Cells[1,4].ClearContents;

15) 设置第一行字体属性:
ExcelApplication1.ActiveSheet.Rows[1].Font.Name := '隶书';
ExcelApplication1.ActiveSheet.Rows[1].Font.Color := clBlue;
ExcelApplication1.ActiveSheet.Rows[1].Font.Bold := True;
ExcelApplication1.ActiveSheet.Rows[1].Font.UnderLine := True;

16) 进行页面设置:
a.页眉:
ExcelApplication1.ActiveSheet.PageSetup.CenterHeader := '报表演示';
b.页脚:
ExcelApplication1.ActiveSheet.PageSetup.CenterFooter := '第&P页';
c.页眉到顶端边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
d.页脚到底端边距3cm:
ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
e.顶边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.TopMargin := 2/0.035;
f.底边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
g.左边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
h.右边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.RightMargin := 2/0.035;
i.页面水平居中:
ExcelApplication1.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
j.页面垂直居中:
ExcelApplication1.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
k.打印单元格网线:
ExcelApplication1.ActiveSheet.PageSetup.PrintGridLines := True;

17) 拷贝操作:

a.拷贝整个工作表:
ExcelApplication1.ActiveSheet.Used.Range.Copy;

b.拷贝指定区域:
ExcelApplication1.ActiveSheet.Range[ 'A1:E2' ].Copy;

c.从A1位置开始粘贴:
ExcelApplication1.ActiveSheet.Range.[ 'A1' ].PasteSpecial;

d.从文件尾部开始粘贴:
ExcelApplication1.ActiveSheet.Range.PasteSpecial;

18) 插入一行或一列:
a. ExcelApplication1.ActiveSheet.Rows[2].Insert;
b. ExcelApplication1.ActiveSheet.Columns[1].Insert;

19) 删除一行或一列:
a. ExcelApplication1.ActiveSheet.Rows[2].Delete;
b. ExcelApplication1.ActiveSheet.Columns[1].Delete;

20) 打印预览工作表:
ExcelApplication1.ActiveSheet.PrintPreview;

21) 打印输出工作表:
ExcelApplication1.ActiveSheet.PrintOut;

22) 工作表保存:
if not ExcelApplication1.ActiveWorkBook.Saved then
ExcelApplication1.ActiveSheet.PrintPreview;

23) 工作表另存为:
ExcelApplication1.SaveAs( 'C:/Excel/Demo1.xls' );

24) 放弃存盘:
ExcelApplication1.ActiveWorkBook.Saved := True;

25) 关闭工作簿:
ExcelApplication1.WorkBooks.Close;

26) 退出 Excel:
ExcelApplication1.Quit;
ExcelApplication1.Disconnect;

(三) 使用Delphi 控制Excle二维图
在Form中分别放入ExcelApplication, ExcelWorkbook和ExcelWorksheet
var asheet1,achart, range:variant;

1)选择当第一个工作薄第一个工作表
asheet1:=ExcelApplication1.Workbooks[1].Worksheets[1];

2)增加一个二维图
achart:=asheet1.chartobjects.add(100,100,200,200);

3)选择二维图的形态
achart.chart.charttype:=4;

4)给二维图赋值
series:=achart.chart.seriescollection;
range:=sheet1!r2c3:r3c9;
series.add(range,true);

5)加上二维图的标题
achart.Chart.HasTitle:=True;
achart.Chart.ChartTitle.Characters.Text:=’ Excle二维图’

http://topic.csdn.net/t/20020514/16/721450.html

// 转贴

Delphi 5 控制Excel

作者:吴晓勇,孙唏瑜
时间:2001年11月20日

(一) 使用动态创建的方法

首先创建 Excel 对象,使用ComObj:
var ExcelApp: Variant;
ExcelApp := CreateOleObject( 'Excel.Application' );

1) 显示当前窗口:
ExcelApp.Visible := True;

2) 更改 Excel 标题栏:
ExcelApp.Caption := '应用程序调用 Microsoft Excel';

3) 添加新工作簿:
ExcelApp.WorkBooks.Add;

4) 打开已存在的工作簿:
ExcelApp.WorkBooks.Open( 'C:/Excel/Demo.xls' );

5) 设置第2个工作表为活动工作表:
ExcelApp.WorkSheets[2].Activate;

ExcelApp.WorksSheets[ 'Sheet2' ].Activate;

6) 给单元格赋值:
ExcelApp.Cells[1,4].Value := '第一行第四列';

7) 设置指定列的宽度(单位:字符个数),以第一列为例:
ExcelApp.ActiveSheet.Columns[1].ColumnsWidth := 5;

8) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
ExcelApp.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米

9) 在第8行之前插入分页符:
ExcelApp.WorkSheets[1].Rows[8].PageBreak := 1;

10) 在第8列之前删除分页符:
ExcelApp.ActiveSheet.Columns[4].PageBreak := 0;

11) 指定边框线宽度:
ExcelApp.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;
1-左 2-右 3-顶 4-底 5-斜( / ) 6-斜( / )

12) 清除第一行第四列单元格公式:
ExcelApp.ActiveSheet.Cells[1,4].ClearContents;

13) 设置第一行字体属性:
ExcelApp.ActiveSheet.Rows[1].Font.Name := '隶书';
ExcelApp.ActiveSheet.Rows[1].Font.Color := clBlue;
ExcelApp.ActiveSheet.Rows[1].Font.Bold := True;
ExcelApp.ActiveSheet.Rows[1].Font.UnderLine := True;

14) 进行页面设置:

a.页眉:
ExcelApp.ActiveSheet.PageSetup.CenterHeader := '报表演示';
b.页脚:
ExcelApp.ActiveSheet.PageSetup.CenterFooter := '第&P页';
c.页眉到顶端边距2cm:
ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
d.页脚到底端边距3cm:
ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
e.顶边距2cm:
ExcelApp.ActiveSheet.PageSetup.TopMargin := 2/0.035;
f.底边距2cm:
ExcelApp.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
g.左边距2cm:
ExcelApp.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
h.右边距2cm:
ExcelApp.ActiveSheet.PageSetup.RightMargin := 2/0.035;
i.页面水平居中:
ExcelApp.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
j.页面垂直居中:
ExcelApp.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
k.打印单元格网线:
ExcelApp.ActiveSheet.PageSetup.PrintGridLines := True;

15) 拷贝操作:

a.拷贝整个工作表:
ExcelApp.ActiveSheet.Used.Range.Copy;
b.拷贝指定区域:
ExcelApp.ActiveSheet.Range[ 'A1:E2' ].Copy;
c.从A1位置开始粘贴:
ExcelApp.ActiveSheet.Range.[ 'A1' ].PasteSpecial;
d.从文件尾部开始粘贴:
ExcelApp.ActiveSheet.Range.PasteSpecial;

16) 插入一行或一列:
a. ExcelApp.ActiveSheet.Rows[2].Insert;
b. ExcelApp.ActiveSheet.Columns[1].Insert;

17) 删除一行或一列:
a. ExcelApp.ActiveSheet.Rows[2].Delete;
b. ExcelApp.ActiveSheet.Columns[1].Delete;

18) 打印预览工作表:
ExcelApp.ActiveSheet.PrintPreview;

19) 打印输出工作表:
ExcelApp.ActiveSheet.PrintOut;

20) 工作表保存:
if not ExcelApp.ActiveWorkBook.Saved then
ExcelApp.ActiveSheet.PrintPreview;

21) 工作表另存为:
ExcelApp.SaveAs( 'C:/Excel/Demo1.xls' );

22) 放弃存盘:
ExcelApp.ActiveWorkBook.Saved := True;

23) 关闭工作簿:
ExcelApp.WorkBooks.Close;

24) 退出 Excel:
ExcelApp.Quit;Top

2 楼dancemaple(枫之舞)回复于 2002-05-14 16:54:14 得分 0

二) 使用Delphi 控件方法
在Form中分别放入ExcelApplication, ExcelWorkbook和ExcelWorksheet。

1) 打开Excel
ExcelApplication1.Connect;

2) 显示当前窗口:
ExcelApplication1.Visible[0]:=True;

3) 更改 Excel 标题栏:
ExcelApplication1.Caption := '应用程序调用 Microsoft Excel';

4) 添加新工作簿:
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0));

5) 添加新工作表:
var Temp_Worksheet: _WorkSheet;
begin
Temp_Worksheet:=ExcelWorkbook1.
WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) as _WorkSheet;
ExcelWorkSheet1.ConnectTo(Temp_WorkSheet);
End;

6) 打开已存在的工作簿:
ExcelApplication1.Workbooks.Open (c:/a.xls
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,0)

7) 设置第2个工作表为活动工作表:
ExcelApplication1.WorkSheets[2].Activate; 或
ExcelApplication1.WorksSheets[ 'Sheet2' ].Activate;

8) 给单元格赋值:
ExcelApplication1.Cells[1,4].Value := '第一行第四列';

9) 设置指定列的宽度(单位:字符个数),以第一列为例:
ExcelApplication1.ActiveSheet.Columns[1].ColumnsWidth := 5;

10) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
ExcelApplication1.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米

11) 在第8行之前插入分页符:
ExcelApplication1.WorkSheets[1].Rows[8].PageBreak := 1;

12) 在第8列之前删除分页符:
ExcelApplication1.ActiveSheet.Columns[4].PageBreak := 0;

13) 指定边框线宽度:
ExcelApplication1.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;
1-左 2-右 3-顶 4-底 5-斜( / ) 6-斜( / )

14) 清除第一行第四列单元格公式:
ExcelApplication1.ActiveSheet.Cells[1,4].ClearContents;

15) 设置第一行字体属性:
ExcelApplication1.ActiveSheet.Rows[1].Font.Name := '隶书';
ExcelApplication1.ActiveSheet.Rows[1].Font.Color := clBlue;
ExcelApplication1.ActiveSheet.Rows[1].Font.Bold := True;
ExcelApplication1.ActiveSheet.Rows[1].Font.UnderLine := True;

16) 进行页面设置:
a.页眉:
ExcelApplication1.ActiveSheet.PageSetup.CenterHeader := '报表演示';
b.页脚:
ExcelApplication1.ActiveSheet.PageSetup.CenterFooter := '第&P页';
c.页眉到顶端边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
d.页脚到底端边距3cm:
ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
e.顶边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.TopMargin := 2/0.035;
f.底边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
g.左边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
h.右边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.RightMargin := 2/0.035;
i.页面水平居中:
ExcelApplication1.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
j.页面垂直居中:
ExcelApplication1.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
k.打印单元格网线:
ExcelApplication1.ActiveSheet.PageSetup.PrintGridLines := True;

17) 拷贝操作:

a.拷贝整个工作表:
ExcelApplication1.ActiveSheet.Used.Range.Copy;

b.拷贝指定区域:
ExcelApplication1.ActiveSheet.Range[ 'A1:E2' ].Copy;

c.从A1位置开始粘贴:
ExcelApplication1.ActiveSheet.Range.[ 'A1' ].PasteSpecial;

d.从文件尾部开始粘贴:
ExcelApplication1.ActiveSheet.Range.PasteSpecial;

18) 插入一行或一列:
a. ExcelApplication1.ActiveSheet.Rows[2].Insert;
b. ExcelApplication1.ActiveSheet.Columns[1].Insert;

19) 删除一行或一列:
a. ExcelApplication1.ActiveSheet.Rows[2].Delete;
b. ExcelApplication1.ActiveSheet.Columns[1].Delete;

20) 打印预览工作表:
ExcelApplication1.ActiveSheet.PrintPreview;

21) 打印输出工作表:
ExcelApplication1.ActiveSheet.PrintOut;

22) 工作表保存:
if not ExcelApplication1.ActiveWorkBook.Saved then
ExcelApplication1.ActiveSheet.PrintPreview;

23) 工作表另存为:
ExcelApplication1.SaveAs( 'C:/Excel/Demo1.xls' );

24) 放弃存盘:
ExcelApplication1.ActiveWorkBook.Saved := True;

25) 关闭工作簿:
ExcelApplication1.WorkBooks.Close;

26) 退出 Excel:
ExcelApplication1.Quit;
ExcelApplication1.Disconnect;

(三) 使用Delphi 控制Excle二维图
在Form中分别放入ExcelApplication, ExcelWorkbook和ExcelWorksheet
var asheet1,achart, range:variant;

1)选择当第一个工作薄第一个工作表
asheet1:=ExcelApplication1.Workbooks[1].Worksheets[1];

2)增加一个二维图
achart:=asheet1.chartobjects.add(100,100,200,200);

3)选择二维图的形态
achart.chart.charttype:=4;

4)给二维图赋值
series:=achart.chart.seriescollection;
range:=sheet1!r2c3:r3c9;
series.add(range,true);
Top

3 楼Deepsea2000(深海)回复于 2002-05-14 17:17:12 得分 0

多谢了!那还有word的方法呢?呵呵,我很菜的!能否一并提供他们的出处,让我能够了解得更加详细。Top

4 楼cg1120(代码最优化-§惟坚韧者始能遂其志§)回复于 2002-05-14 17:31:12 得分 60

在DELPHI中操作Excel:
Unit excel;

Interface

Uses

Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ComObj,

{ ComObj是操作OLE对象的函数集}

Type

TForm1=class(TForm)

Button1:TButton;

Procedure Button1Click(Sender:Tobject);

Private

{ Private declaration}

Public

{ Public declaration }

end;



var

Form1:Tform1;

Implementation

{$R *.DFM}

procedure TForm1.Button1Click(sender:Tobject);

var

eclApp,WordBook:Variant; {声明为OLE Automation对象}

xlsFileName:string;

begin

xlsFileName:=’ex.xls’;

try

{创建OLE对象:Excel Application与WordBook}

eclApp:=CreateOleObject(‘Excel.Application’);

WorkBook:=CreateOleObject(Excel.Sheet’);

Except

Application.MessageBox(‘你的机器没有安装Microsoft Excel’,

’使用Microsoft Excel’,MB_OK+MB_ICONWarning);

Exit;

End;

Try

ShowMessage(‘下面演示:新建一个XLS文件,并写入数据,并关闭它。’);

WorkBook:=eclApp.workbooks.Add;

EclApp.Cells(1,1):=’字符型’;

EclApp.Cells(2,1):=’Excel文件’;

EclApp.Cells(1,2):=’Money’;

EclApp.Cells(2,2):=10.01;

EclApp.Cells(1,3):=’日期型’;

EclApp.Cells(2,3):=Date;

WorkBook.SaveAS(xlsFileName);

WorkBook.close;

ShowMessage(‘下面演示:打开刚创建的XLS文件,并修改其中的内容,然后,由用户决定是否保存。’);

Workbook:=eclApp.WorkBooks.Open(xlsFileName);

EclApp.Cells(1,4):=’Excel文件类型’;

If MessageDlg(xlsFileName+’已经被修改,是否保存?’,

mtConfirmation,[mbYes,mbNo],0)=mrYes then

WorkBook.Save

Else

WorkBook.Saved:=True; {放弃保存}

Workbook.Close;

EclApp.Quit; //退出Excel Application

{释放Variant变量}

eclApp:=Unassigned;

except

ShowMessage(‘不能正确操作Excel文件。可能是该文件已被其他程序打开,或系统错误。’);

WorkBook.close;

EclApp.Quit;

{释放Variant变量}

eclApp:=Unassigned;

end;

end;

end.



了解了上述操作过程后,我们就可以很容易地将数据库中的数据转换成Excel文件。


http://www.yesky.com/275/1801775.shtml
Delphi控制Excel自动生成报表

作者:赵中凯 梅国建出处:论坛责任编辑: 方舟 [ 2004-05-27 11:35 ]
本文介绍如何使用Delphi来控制Excel完成数据库与报表之间的数据交换

<script language="JavaScript" type="text/javascript"> document.write("<script src=/"http://vd.yesky.com/html/"+ad_cid+"/"+ad_cid+"_c-column-1.js/"><//script>&quot;); <script src="http://vd.yesky.com/html/412/412_c-column-1.js" type="text/javascript"></script><script src="http://vd.yesky.com/html/js/2114.js" language="JavaScript1.1" type="text/javascript"></script>
<script language="JavaScript" type="text/javascript"> document.write("<script src=/"http://vd.yesky.com/html/"+ad_cid+"/"+ad_cid+"_c-pip.js/"><//script>&quot;); <script src="http://vd.yesky.com/html/412/412_c-pip.js" type="text/javascript"></script><script src="http://vd.yesky.com/html/js/2557.js" language="JavaScript1.1" type="text/javascript"></script>
摘 要:Excel是当前最流行的数据报表制作工具。本文介绍如何使用Delphi来控制Excel完成数据库与报表之间的数据交换,讨论了报表制作工程中的一些细节性问题。

  关键字:Delphi,Excel,报表

<iframe width="360" scrolling="no" height="300" frameborder="0" align="right" marginheight="0" marginwidth="0" src="http://images.chinabyte.com/adjs/iframe-pip/y-software-pip.html"></iframe>  1 引言

  数据报表作为企事业单位上报和下达的重要信息载体,随着信息化建设的不断推进,在实际的工作中得到了前所未有的应用。因此,数据报表已经成为管理信息系统中重要的一项功能,并且,由于数据的多样性和统计信息的增加,数据报表的系统实现变得越来越复杂。

   Delphi是一个高效的可视化数据库管理信息系统开发工具,.但是Delphi开发环境中提供的报表控件在制作复杂报表时显得不够理想,不管是以前版 本提供的Quick Report控件组,还是Delphi 7提供的Rave控件组,都不能让用户对生成的报表进行改动,且程序控制很难实现。Excel作为现代办公常用的电子表格制作工具,以它的易操作性和实用 性,得到了各行业办公人员的青睐。本文根据实际应用实践,介绍利用Delphi编程控制Excel生成报表的各种方法。

  2 Delphi控制Excel的方法

  2.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.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;

  (3)表格的复制与粘贴(copyandPaste)

procedure copyandPaste;
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.copy; //复制选定的表格
 sheet.range[sheet.cells[40,1],sheet.cells[40,1]].select; //选择要粘贴的位置
 sheet.paste; //粘贴表格
end;

  2.3 文件的保存

  文件保存是在创建文件的基础上进行的,过程saveFile说明了文件保存过程中应该注意的问题:

procedure saveFile;
var
 sheet,v:variant;
begin
 v:=createExcel;
 if savedialog.execute then
 begin
  v.workbooks[1].saveas(savedialog.FileName);//保存文件
  v.workbooks[1].close; //关闭工作表
  v.quit; //关闭Excel
  v := unassigned;
 end;
end;

  3 报表制作应注意的问题

  (1)报表格式的选择

   报表格式的选择对信息系统报表的实现方法起着决定性的影响。如果在报表的格式要求比较严格的情况下,应当采用模板的方式产生报表。由于模板在数据导入之 前就已经按照标准制定好,所以只要在程序中控制模板的复制与粘贴,然后编程实现数据输入指定位置即可。而对于报表格式多变的情况,由于数据的不同,需要合 并单元格或者控制边框,可以直接在程序中自动控制报表的生成。

  (2)打印

  对于Excel报表的打印,最好不要在 程序中进行控制,因为报表往往需要签字或者进行审查,有许多报表都包含平面图或示意图,为了有效的控制打印质量,最好通过程序控制输出或显示Excel文 件,以便修改;另一个重要的原因是Excel具有强大的排版功能,而这正是选择Excel导出报表的重要原因。

  (3)报表时间和表头

  报表时间要有用户可以控制的输出。表头的制作要在事先做好格式,控制输出时,只改动那些诸如上报单位、下达单位、负责人等数据,这样既保证了系统的效率,又不失其实用性。

  4 结论

   用Delphi控制Excel来完成数据库管理信息系统的数据报表功能,是Delphi制作复杂报表的最佳选择,因为Delphi不但能控制数据的导出 与导入,而且可以完成当前Excel应用中的大部分功能。如果深入研究Visual Basic for Application(VBA)就可以制作出符合实际需要的各种Delphi控制Excel的控件。



表格线等问题:

1、加边框
excelworksheet1.range['a1','a1'].borders[i].linestyle:=1; i是参数,代表单元格的四边以及里面的斜线
1-左 2-右 3-顶 4-底 5-斜( / ) 6-斜( / )
2、控制单元格
excelworksheet1.Rows.Range_['a1','a1'].Font.Size:='10'; //字体大小
excelworksheet1.Rows.Range_['a1','a1'].Font.Name:='Garamond'; //字体名称
excelworksheet1.Rows.Range_['a1','a1'].Font.Color:=clred; //字体颜色
excelworksheet1.Rows.Range_['a1','a1'].Font.bold:=true; //字体加粗
excelworksheet1.Rows.Range_['a1','a1'].HorizontalAlignment:= xlCenter; //文字居中
excelworksheet1.Rows.Range_['a1','a1'].VerticalAlignment:= xlBottom; //文字向下对齐
excelworksheet1.Rows.Range_['a1','a1'].WrapText:=True; //自动换行
excelworksheet1.Rows.Range_['a1','a1'].Orientation:= 0; //方向为0度
excelworksheet1.Rows.Range_['a1','a1'].AddIndent:= False;//不增加缩进
excelworksheet1.Rows.Range_['a1','a1'].ShrinkToFit:= False;//不缩小字体填充
excelworksheet1.Rows.Range_['a1','a1'].MergeCells:= False;//不合并单元格

附送:
若想知道在MS OFFICE中如何做某件事,最简单的方法不过利用“工具|宏”菜单中的录制新宏。录制时只做您想要做的一件事,然后停止录制。选择同一菜单中的宏,选同 一宏名,然后单击“编辑”按钮,打开VB编辑器,就可看到调用的函数的。这样,比直接阅读OFFICE中自带的VB FOR APPLICATION帮助来得快。这是个最简单的方法了。


另外可以通过在delphi中运行宏来执行某些操作
分享到:
评论

相关推荐

    Delphi控制Excel自动生成报表

    内容不多 2.1 创建Excel文件 2.2 数据表格控制 (1)数据的导入(importData) (2)单元格的合并、边框的控制(lineStylecontrol) (3)表格的复制与粘贴(copyandPaste) 2.3 文件的保存 3 ...

    EMS Excel Report v1.5 创建强大的Excel报表

    简单易用的组件属性编辑器可以让你快速创建MS Excel强大报表,支持Borlandreg; Delphireg; 5, 6, 7和MS Office 97 SR-1, 2000, 2002 (XP) EMS ExcelReport component is a powerful band-oriented generator of ...

    Delphi开发技巧之-object

    使用OLE控制Excel 创建新的Outlook联系项目 取outlook的所有联系人 取已注册Win32模块和它们版本 在Delphi中播放 Flash 在Excel内查看TDataSet 备份Outlook附件 将Word文档保存为Rtf 打印 预览MS Access报表 找回...

    EMS Advanced Excel Report Library 1.7.0.4

    EMS Advanced Excel Report Library 1.7.0.4 ...Advanced Excel Report for Delphi是一个MS Excel基于模版报表生成工具的图表编程控件。简单易用的组件属性编辑工具可以让你快速创建MS Excel强大报表(zsh)。

    EMS Advanced Excel Report 2.0.0.1 D2010 XE XE10.1~10.3

    Advanced Excel Report for Delphi是一个MS Excel基于模版报表生成工具的图表...简单易用的组件属性编辑工具可以让你快速创建MS Excel强大报表。EMS Advanced Excel Report 2.0.0.1 支持 Delphi D2010 XE XE10.1~10.3。

    80例上手Delphi7编程(完全版)+源码

     如何在Delphi中操作Excel  实现应用程序的文件拖放功能  将EXE文件转换成SWF文件  将SWF文件转换成EXE文件  文件捆绑  统计中英文字个数  06图形图像多媒体  实例一--艺术字效果  实例七---...

    Delphi开发范例宝典目录

    实例191 在DELPHI中控制Word 246 实例192 带日志的程序 247 实例193 获取窗口文本 248 实例194 判断文件是否正在被使用 250 实例195 提取文件中的图标资源 251 实例196 在程序中调用.HLP文件 253 实例...

    PReport中式报表

    1 控件在eReport,CReport基础上修改,改动幅度很大,支持Delphi 72 如何从无到有新建一张报表:先将TPRExcute控件拖到窗口上,设置Datasources属性,然后双击TPRExcute控件即可开始创建报表过程3 支持普通列表,可以从...

    DevExpressVCL 23.1.4 D12.7z

    报表和打印:DevExpress VCL提供了先进的报表设计工具和打印功能,可以帮助开发人员创建复杂的报表,并将其打印或导出为PDF、Excel等格式。它支持多种报表样式和布局选项,使开发人员能够创建专业水平的报表。 图形...

    Advanced Excel Report 2.0.3 D11.rar

    Advanced Excel Report for Delphi是一个MS Excel基于模版报表生成工具的图表编程控件。简单易用的组件属性编辑工具可以让你快速创建MS Excel强大报表。

    delphi 开发经验技巧宝典源码

    0007 在Delphi中加载QReport报表组件 7 1.3 创建DLL文件 8 0008 生成一个DLL文件 8 0009 调用DLL文件 8 1.4 窗体相关操作 9 0010 将组件置前/置后 9 0011 如何锁定窗体中的组件 9 0012 如何改变窗体...

    delphi 开发经验技巧宝典源码06

    0007 在Delphi中加载QReport报表组件 7 1.3 创建DLL文件 8 0008 生成一个DLL文件 8 0009 调用DLL文件 8 1.4 窗体相关操作 9 0010 将组件置前/置后 9 0011 如何锁定窗体中的组件 9 0012 如何改变窗体...

    PReport

    1 控件在eReport,CReport基础上修改,改动幅度很大,支持Delphi 72 如何从无到有新建一张报表:先将TPRExcute控件拖到窗口上,设置Datasources属性,然后双击TPRExcute控件即可开始创建报表过程3 支持普通列表,可以从...

    eDocEngine VCL试用版:一款全球顶级的PDF创建控件

    eDocEngine VCL 试用版 试用版 开发语言: VCL 可用平台: Delphi/C++ Builder 当前版本: v4 ...eDocEngine拥有现成的Report-Exoprt接口,这些接口紧密的集成了流行的Delphi报表工具,如ReportBuilder,

    《Delphi 6灵感设计》范例源代码

    学习单73 动态创建数据表 学习单74 在程序中设置ODBC数据源 学习单75 自动检测、建立数据库别名和数据表 任 务 篇任务单76 绘制图形 任务单77 图像编辑器 任务单78 制作mp3播放器 任务单79 多媒体播放器 任务单80 ...

    SOAOFFICE - 微软 OFFICE 中间件

    SOAOFFICE同时支持C/S方式的编程和其他支持ActiveX的容器,您可以在VB,Delphi以及C++ Builder中使用本中间件,快速创建C/S结构的应用。 SOAOFFICE中间件是一个国际化产品,支持多种界面语言:简体中文、繁体中文、...

    咏南进销存 两层(C/S)

    1.Delphi7+Sql Server2000 c/s两层架构 2.使用三方控件:sailPrint和vclSkins ...4.自定义报表、导出Excel 5.界面可自动换肤 6.各种POS硬件设备驱动 7.采用OOP方式开发,易维护、扩展

    滴答表格企业版 5.1.2

    软件工程师通过调用滴答 表格的接口,快速实现自定义模板(单据)及报表,将用户个性化的要求转变成由最终用户自行设计,并创建出适合自己的模板,而 不再需要通过软件工程师的编程实现。最终提高软件的通用性和开发...

Global site tag (gtag.js) - Google Analytics