说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Delphi3如何调用Excel

HTML文档下载 WORD文档下载 PDF文档下载
Delphi3如何调用Excel

Delphi功能强大,常被选择用来开发数据库管理软件的首选工具。在开发数据库管理软件时,经常涉及到报表的制作与输出。而Excel又特别擅长于报表和数据处理,且Excel能为Delphi或其他应用程序通过OLE所控制,因此,我们可以通过OLE向Excel传数据,作为数据库管理软件中,制作报表的又一范例。

首先,我们来了解一下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: TObject);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的函数等。

备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘