分享
 
 
 

利用Delphi 5.0开发OLE自动化控制器操纵Excel

王朝delphi·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

---- OLE自动化是Windows应用程序之间互相操纵的一种技巧。被操纵的一方称为自动化服务器(也称自动化对象),典型的自动化服务器有Microsoft Word、Excel和Powerpoint。操纵自动化服务器的一方称为自动化控制器。在开发数据库应有程序中,经常需要借助Microsoft Excel的强大报表功能,把数据库中的数据输出到Excel表格中。Delphi 5.0以前的版本虽然也可以编写自动化控制器和自动化服务器,但编写程序较为复杂,不易掌握。Delphi 5.0对于OLE提供了强大的支持,利用Delphi 5.0最新提供的Servers栏控件可以很容易开发OLE自动化控制器实现对OLE自动化服务器的调用,发挥Word、Excel、Powerpoint的强大功能。

---- 下面给出一利用Delphi 5.0开发OLE自动化控制器操纵Excel的实例,希望对用Delphi开发OLE应用程序的编程人员有所帮助。

---- 首先新建一Application, 然后在Form1上放置Servers栏控件ExcelApplication1、 ExcelWorkbook1、 ExcelWorksheet1, 再放置控件Table1、 Datasource1、 Dbgrid1、 Button1、 Button2、 Button3、 Button4, 并设置Table1.databasename:=dbdemos, Table1.TableName:=Country.db, Table1.active:=True, Button1.Caption:='SaveToExcel', Button2.caption:='PrintPreview', Button3.caption:='Print', Button4.caption:='CloseExcel'。代码如下:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes,

Graphics, Controls,

Forms, Dialogs, Excel97, OleServer, Db, DBTables,

Grids, DBGrids, StdCtrls;

type

TForm1 = class(TForm)

ExcelApplication1: TExcelApplication;

ExcelWorkbook1: TExcelWorkbook;

ExcelWorksheet1: TExcelWorksheet;

Table1: TTable;

Table1Name: TStringField;

Table1Capital: TStringField;

Table1Continent: TStringField;

Table1Area: TFloatField;

Table1Population: TFloatField;

button1: TButton;

DataSource1: TDataSource;

DBGrid1: TDBGrid;

Button2: TButton;

Button3: TButton;

Button4: TButton;

procedure button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.button1Click(Sender: TObject);

var

i,row,column:integer;

begin

Try

ExcelApplication1.Connect;

Except

MessageDlg('Excel may not be installed',

mtError, [mbOk], 0);

Abort;

End;

ExcelApplication1.Visible[0]:=True;

ExcelApplication1.Caption:='Excel Application';

ExcelApplication1.Workbooks.Add(Null,0);

ExcelWorkbook1.ConnectTo

(ExcelApplication1.Workbooks[1]);

ExcelWorksheet1.ConnectTo

(ExcelWorkbook1.Worksheets[1] as _Worksheet);

Table1.Open;

row:=1;

While Not(Table1.Eof) do

begin

column:=1;

for i:=1 to Table1.FieldCount do

begin

ExcelWorksheet1.Cells.Item[row,column]:

=Table1.fields[i-1].AsString;

column:=column+1;

end;

Table1.Next;

row:=row+1;

end;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

ExcelWorksheet1.PrintPreview;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

ExcelWorksheet1.PrintOut;

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

ExcelApplication1.Disconnect;

ExcelApplication1.Quit;

end;

end.

---- 本程序在Delphi 5.0下调试通过。

让DELPHI与OFFICE联姻

由于微软的Office系列的完善的功能;与Windows和IE的紧密集成以及强大的扩展能力,它实际上已经成为事实上的Windows下办公软件的标准,我们知道在VB中可以建立各种Office对象(Word、Excel)并控制这些对象编辑、打印、保存文档以及控制执行Office中的很多操作。象这样在VB中建立并控制Office对象是十分有用的,例如你可以将一个或者一批数据库自动输入到Word或者Excel中并保存,再通过Outlook将文档分发给其它同仁。

过去,这只有通过VB才能实现的,但是现在Delphi5也提供了这样强大的对象组。利用Delphi也可以利用Office资源了。

打开Delphi,滚动Compent Palette到Servers页,就可以看到很多熟悉的控件图标,这些就是Office组件的控件。Delphi 5中对应Office的组件包括了Word、Excel、Access、PowerPoint和Outlook可以说是十分的全面。不过要使用这些组件首先要保证你的系统中安装了Office 97或以上的 版本。

下面首先来说以下Office组件的基本使用方法Delphi中对于Office中不同的组件,首先要建立一个Application对象,例如要控制Word,首先要建立TWordApplication对象,然后再将诸如TWordDocument等Word对象通过ConnectTo方法连接到TWordApplication对象上。对于其它的Excel、Outlook等也是如此。

下面我通过具体的范例来说明对Delphi中Office对象的控制,即如何将文字输出到Word中进行简单的排版并保存和打印输出。

首先建立一个新的工程,在Form1中加入三个TButton对象、一个TMemo对象、一个TWordApplication对象、一个TWordDocument对象、一个TWordFont对象。下面是Form1的代码:

unit Unit1;

interface

uses

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

StdCtrls, ExtCtrls, Word97, OleServer,Clipbrd;

type

TForm1 = class(TForm)

Memo1: TMemo;

Button1: TButton;

WordApplication1: TWordApplication;

WordDocument1: TWordDocument;

WordFont1: TWordFont;

Button2: TButton;

Button3: TButton;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);

begin

Button1.Caption := '插入到Word';

Button2.Caption := '打印';

Button3.Caption := '退出';

Button2.Enabled :=False;

Button3.Enabled :=False;

end;

procedure TForm1.Button1Click(Sender: TObject);

var

Template,NewTemplate,ItemIndex:OleVariant;

procedure setfont;

begin

WordFont1.ConnectTo(WordDocument1.Sentences.Get_Last.Font);

WordFont1.Bold := 1;

WordFont1.Italic := 1;

WordFont1.shadow := 1;

WordFont1.Size := 12;

end;

begin

try

Template := EmptyParam;

NewTemplate := True;

ItemIndex := 1;

try

Wordapplication1.Connect;

except

MessageDlg('无法连接,也许没有安装Word', mtError, [mbOk], 0);

Abort;

end;

Wordapplication1.Visible := False;

WordApplication1.Caption := 'Delphi Word';

file://建立一个新文档

Template := EmptyParam;

NewTemplate := False;

WordApplication1.Documents.Add(Template, NewTemplate);

file://建立WordDocument连接

WordDocument1.ConnectTo(WordApplication1.Documents.Item(ItemIndex));

file://因为Word进行拼写检查需要很多时间,所以首先关闭检查

WordApplication1.Options.CheckSpellingAsYouType := False;

WordApplication1.Options.CheckGrammarAsYouType := False;

file://将Memo1的内容拷贝到Word中

SetFont;

WordDocument1.Range.InsertAfter('Memo1的文本: ' + #13+Memo1.Text + #13);

Button2.Enabled :=True;

Button3.Enabled :=True;

Button1.Enabled :=False;

except

on E: Exception do

begin

ShowMessage(E.Message);

WordApplication1.Disconnect;

end;

end;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

WordDocument1.PrintOut;

end;

procedure TForm1.Button3Click(Sender: TObject);

var

SaveChanges,OriginalFormat,RouteDocument,SavePath: OleVariant;

begin

SaveChanges := WdDoNotSaveChanges;

OriginalFormat := UnAssigned;

RouteDocument := UnAssigned;

try

SavePath:='c:\samp.doc';

WordDocument1.SaveAs(SavePath);

WordDocument1.Close;

WordDocument1.Disconnect;

WordApplication1.Quit(SaveChanges, OriginalFormat, RouteDocument);

WordApplication1.Disconnect;

close;

except

on E: Exception do

begin

Showmessage(E.Message);

WordApplication1.Disconnect;

end;

end;

end;

end.

运行程序,在Memo1中输入一些文字,点击“插入到Word”按钮,然后点击“打印”按钮就可以将由Memo1输入到Word中的文本打印出来。点击“退出”按钮就可以将文档保存到 c:\samp.doc 中然后关闭与Word的连接并退出。

由上面的范例可以看到,Delphi对于Office组件的编程同VB是有一些相似的,由于不知道什么原因,Delphi并没有提供Office组件的帮助文档。上面的程序我是一点点摸索出来的,但是如果你掌握了Office组件的编程技巧,加上Delphi强大的功能,一定会使你的程序如虎添翼的。

以上程序在Windows98、Windows2000,Delphi5.0,Office2000下运行通过。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有