分享
 
 
 

用Delphi4.0直接控制Word97

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

用Delphi4.0直接控制Word97

编号:QA003053

建立日期: 2000年6月15日 最后修改日期:2000年6月15日

所属类别:

Delphi - Office开发

文章:

摘要:玩过PowerBuilder的朋友一定知道,PB中最重要的技术就是它的DataWindow技术,用它来设计表单、处理数据录入、设计报表十分方便。然而Delphi的报表支持功能远不及PB。Delphi的专业版中包括了QuickReport,不过它是集合由QSD AS(一家挪威公司)授权的报表组件。当然,我们也可以使用外部报表工具,如ReportSmith或Cristal Report。不过控制稍嫌复杂,并且它们与Delphi之间缺少集成性。

我们在开发《公文管理系统》网络版时,在实现公文打印时,尝试过不同的方法来实现。我们的要求是将一篇普通公文按公文格式打印出来,而用户能对其进行排版进行一些简单的控制。小辉刚开始是用的QuickReport来试的,效果很不尽人意,特别是对一些中文格式的支持方面;后来小辉一不作二不休,干脆自己手工编写打印程序,不依赖设计工具,只可惜小辉技术不到家,写到一半时玩不下去了,只好另找出路。正好那天来了份《中国计算机报》,上面有一篇介绍如何在VB中使用Excel的文章。小辉一想:何不用Delphi将数据发送到Word,由Word来完成编辑排版工作呢?说穿了,就是用OLE自动化技术。

小辉一试,效果竟还可以。——虽然对于一个程序员来说,自己编的程序中要挂接一个别人的应用程序才能完全实现自己的功能,就象鸡群里插只鸭,心里总有点那个。但由于开发任务紧,主任又隔三隔四的来催,虽然最终有点不伦不类,小辉也顾不得那么多了。好了,废话少说,看看小辉是怎样实现的吧——

链接:http://www.xiaohui.com

主持人:由于原链接已经失效。我们在这里提供原文:

一、前言

玩过PowerBuilder的朋友一定知道,PB中最重要的技术就是它的DataWindow技术,用它来设计表单、处理数据录入、设计报表十分方便。然而Delphi的报表支持功能远不及PB。Delphi的专业版中包括了QuickReport,不过它是集合由QSD AS(一家挪威公司)授权的报表组件。当然,我们也可以使用外部报表工具,如ReportSmith或Cristal Report。不过控制稍嫌复杂,并且它们与Delphi之间缺少集成性。

我们在开发《公文管理系统》网络版时,在实现公文打印时,尝试过不同的方法来实现。我们的要求是将一篇普通公文按公文格式打印出来,而用户能对其进行排版进行一些简单的控制。小辉刚开始是用的QuickReport来试的,效果很不尽人意,特别是对一些中文格式的支持方面;后来小辉一不作二不休,干脆自己手工编写打印程序,不依赖设计工具,只可惜小辉技术不到家,写到一半时玩不下去了,只好另找出路。正好那天来了份《中国计算机报》,上面有一篇介绍如何在VB中使用Excel的文章。小辉一想:何不用Delphi将数据发送到Word,由Word来完成编辑排版工作呢?说穿了,就是用OLE自动化技术。

小辉一试,效果竟还可以。——虽然对于一个程序员来说,自己编的程序中要挂接一个别人的应用程序才能完全实现自己的功能,就象鸡群里插只鸭,心里总有点那个。但由于开发任务紧,主任又隔三隔四的来催,虽然最终有点不伦不类,小辉也顾不得那么多了。好了,废话少说,看看小辉是怎样实现的吧——

二、窗体设计

说穿了其实很简单。小辉在这里做了一个简单的示例程序:

1. 设置窗体Form1的Font.name为‘宋体’,Font.size为12;

2. 窗体上依次放置lable1-labe5五个tLable控件,其caption属性分别为‘文号’、‘标题’、‘收文单位’、‘正文’、‘发文单位’

3. 在窗体上依次放置 tEdit、tEdit、tEdit、tMemo、tEdit五个编辑控件,其name属性分别为:ED_WenHao、ED_BiaoTi、ED_ShouWenDanWei、ED_ZhenWen、ED_FaWenDanWei。

4. 在窗体上依次放置两个tButton控件,其name属性分别为Btn_PRintToWord、btn_Quit,Caption属性分别为‘打印’和‘退出’。

窗体设计格式可参考本文末所附图片。

三、代码设计

程序段如下所示:

unit Unit1;

interface

uses

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

StdCtrls,OleCtnrs,ComObj;

type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

ED_WenHao: TEdit;

ED_BiaoTi: TEdit;

ED_ShouWenDanWei: TEdit;

ED_ZhenWen: TMemo;

ED_FaWenDanWei: TEdit;

Btn_PrintToWord: TButton;

Btn_Quit: TButton;

procedure Btn_PrintToWordClick(Sender: TObject);

procedure Btn_QuitClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

//开始:数据发送到word事件

procedure TForm1.Btn_PrintToWordClick(Sender: TObject);

vAR

VarWord: Variant;// 创建WORD时所用

begin

try

// 1. 建立OleObject,连接word97

VarWord:=CreateOleObject('word.basic');

// 2. 建立Word97的新文件

VarWord.FileNew;

// 3. 设置Word97的基本状态

VarWord.ViewZoom75; //设置显示比例为75%

VarWord.ViewPage; //改为页面显示方式

// 4. 将当前数据控件上的信息发送至Word97

// 4.1 发送文号数据

VarWord.CenterPara; //居中

Varword.font('宋体'); //设置字体

VarWord.FontSize(14); //设置字号

varword.insert(#13+#13+ ED_WenHao.Text+#13+#13+#13);

// 4.2 发送标题数据

VarWord.font('黑体');

VarWord.Fontsize(16);

VarWord.insert( ED_BiaoTi.text+#13);

// 4.3 发送收文单位数据

VarWord.LeftPara; //左对齐

VarWord.Font('宋体');

VarWord.fontSize(14);

VarWord.Insert(#13+ ED_ShouWenDanWei.Text+':'+#13);

// 4.5 发送正文数据

VarWord.fontSize(14);

VarWord.Insert( ED_ZhenWen.Text+#13);

// 4.6 发送发文单位数据

VarWord.RightPara; //右对齐

VarWord.fontSize(14);

VarWord.Insert( ED_FaWenDanWei.Text+#13);

// 5 最后设置

VarWord.StartOfdocument; //到文首

VarWord.AppMaxiMize; //设置窗口最大化

VarWord.AppShow; //显示应用程序

except

showmessage('运行 Microsoft Word 失败!');

end; //end of try

end;

//end:数据发送到word事件

//开始:窗口关闭事件

procedure TForm1.Btn_QuitClick(Sender: TObject);

begin

close;

end;

//End:窗口关闭事件

end.

// 这是主程序的尾部

四、附注

一、说明

1、因只是一个演示示例,故没有与后台数据库连接起来,实际操作可将相应的tEdit、tMemo控件用tDBEdit、tDBMemo控件所代替,增加tTable、tDataSource等控件,连接数据库。

2、本示便没有考虑如何进行批量打印

3、程序在Pwin97、Delphi 4.0专业版、中文Word97下通过。

4、由于Word有不同的版本,微软在每种外语中转换了一些OLE自动化接口,如果用其他版本的Word,本程序运行有可能出错。

5、可以通过word97帮助中归结的宏命令来得到相应的驱动命令;亦或可在Word97下单击[工具]菜单--单击[自定义]--单击[键盘]按钮,可以查看到Word97中分类别显示的Word命令。

二、优点与缺点

1、通过OLE自动化技术,将公文的排版打印工作交给Word去完成,对最终用户而言,控制较方便。

2、在Word97的若对数据进行了修改,则不能传回调用它的主程序,反映到数据库中。这是它的不便这处。

3、本例只是在特殊情况下的一种应用,若要打印大量数据标签,制作表格,小辉觉得还是用报表灵活一些

文章来源:小辉程序员之路。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有