Delphi3如何调用Excel
2008-04-09 04:18:16来源:互联网 阅读 ()
首先,我们来了解一下Excel的自动化对象,Excel有一个Application对象,一个WorkBook对象,一个Range对象和一个Sheet对象,当然你可以从MicroSoft Excel Visual Basic的帮助中了解更多的内容,因此,我们可以从Delphi的应用程序中通过OLE轻松的使用Excel的优点。
由于,Delphi无法对某个OLE方法或属性的调用进行运行时的语法检查。例如:以下这段代码,虽然Delphi可以对它进行成功的编译,但在运行时它却不能被正确的执行,因为在Excel Basic中没有FormatDriveC这个函数:
var
V:variant;Begin
V:=CreateOleObject(‘Excel.Application’)
V.FormatDriveC;End;
以下为一个例子,说明如何使用Delphi将数据表中的数据传送给Excel的。
注意:运行本程序,你的机器中必须已经安装了Excel。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,olectnrs,
StdCtrls, Buttons, Grids, DBGrids, ExtCtrls, Db, DBTables,ComObj;
type
TMainForm = class(TForm)
DataSource1: TDataSource;
Table1: TTable;
Panel1: TPanel;
DBGrid1: TDBGrid;
Panel2: TPanel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
CheckBox1: TCheckBox;
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.DFM}
procedure TMainForm.BitBtn2Click(Sender: TObject);begin
close;end;
procedure TMainForm.BitBtn1Click(Sender: T ect);var
v:variant;
s:string;
i,j:integer;begin
s:="c:\gz\example.xls"; //文件名
if fileexists(s) then deletefile(s);
v:=CreateOLEObject("Excel.Application"); //建立OLE对象
V.WorkBooks.Add;
if Checkbox1.Checked then
begin
V.Visible:=True;
MainForm.WindowState:=wsMinimized;
//使Excel可见,并将本程序最小化,以观察Excel的运行情况
end else
begin
V.Visible:=False;
end;
//使Excel窗口不可见
Application.BringToFront; //程序前置
try
try
Cursor:=crSQLWait;
Table1.DisableControls;
For i:=0 to Table1.FieldCount-1 do //字段数
//注意:Delphi中的数组的下标是从0开始的,
// 而Excel的表格是从1开始编号
begin
V.Goto("R1" "C" IntToStr(i 1)); //Excel的表格是从1开始编号
V.ActiveCell.FormulaR1C1:=Table1.Fields[i].FieldName;//传送字段名
end;
j:=2;
Table1.First;
while not Table1.EOF do
begin
For i:=0 to Table1.FieldCount-1 do //字段数
begin
V.Goto("R" IntToStr(j) "C" IntToStr(i 1));
V.ActiveCell.FormulaR1C1:=Table1.Fields[i].AsString;//传送内容
end;
Table1.Next;
j:=j 1;
end;
V.ActiveSheet.Protect(DrawingObjects:=True, Contents:=True, Scenarios:=True);//设置保护
ShowMessage("数据库到Excel的数据传输完毕!");
v.ActiveWorkBook.Saveas(filename:=s);//文件存盘
except //发生错误时
ShowMessage("没有发现Excel!");
end;
finally
Cursor:=crDefault;
Table1.First;
Table1.EnableControls;
v.quit; //退出OLE对象
MainForm.WindowState:=wsNormal;
end;end;
procedure TMainForm.FormShow(Sender: TObject);begin
Table1.Open;end;
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);begin
Table1.Close;end;
procedure TMainForm.FormCreate(Sender: TObject);var
sl:TStringList; {字符串列表变量}
i:Integer;begin
sl:=TStringlist.Create;
Session.GetAliasNames(sl); {取得别名列表}
if (sl.IndexOf("EXAMPLE")=-1) then {判断别名是否存在}
begin
i:=Application.MessageBox("别名EXAMPLE不存在,现在创建吗?","BDE信息窗口",mb_OKCancel);
{增加一个名为EXAMPLE的数据库别名}
if i=IDCANCEL then begin
sl.Free;
Application.Terminate; //程序终止
end;
Session.AddStandardAlias("EXAMPLE","C:\GZ","Paradox"); //增加别名
Session.SaveConfigFile; {BDE配置文件存盘}
end ;end;
end.执行本程序,就把数据表中内容输出到C:\GZ下的example.xls文件中了,你可以用Excel对本文件进行编辑等操作。
本程序只要拷贝到C:\GZ下运行即可,程序判断后自动增加数据库别名。
本文只是对Delphi中OLE的简单认识,程序的功能比较简单,当然你可以增加别的内容,以丰富本程序,如:可以增加选取数据库别名,再从别名中选取任何数据表,以增加程序的通用性,或者在程序中使用Excel的函数等。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:OpenGL简介
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash