建议用VBA的帮助找吧,这样自己不但学习delphi与其它应该软件的
结合使用,也学习了office编程,而且看VBa的帮助并不难,很清楚的。

解决方案 »

  1.   

    我建设查一查Windows API函数,其实Delphi自带的帮助也够全了。
    且Delphi有很多控制Word的控件呀,不过我现在没用得上,可以帮你UP一下。
      

  2.   

    装Word时注意一下选项,把‘microsoft word visual basic 参考’装上,里面什么都有。
      

  3.   

    1.用Server页上的控件;2.录制宏命令,然后再看看宏代码。
      

  4.   

    给你几篇:回复人:dingsg111(飞天) (2001-7-13 10:48:51) 得0分
    Windows支持三种基本的IPC(进程间通信)机制:动态链接库(DLL)中的共享数据段、Windows剪贴版(Clipboard)和动态数据交换DDE(Dynamic 
          Data Exchange)。许多著名的Windows应用程序如Microsoft 
          Word等都宣布支持DDE技术,并在程序中嵌入了DDE消息处理函数。而此类应用程序单在DDE技术上讲大多是作为一个DDE服务器形式存在的,这就允许用户通过自行编制的一些外围软件以DDE客户的身份对其进行连接,并通过向DDE服务器程序发送一些特定的宏命令来完成对服务器程序的动态控制,本文就以常用的Microsoft 
          Word为例,讲述了在Delphi 5.0编程环境下如何编制DDE客户程序,使其动态控制Microsoft Word的一般方法。       二、 DDE的工作原理       DDE顾名思义,是提供对不同程序在运行期间实现对数据的动态交换的一种通用技术。Windows消息虽然是在不同程序窗口间传送信息的最佳手段,但一条消息只能包含两个参数(wParam和lParam),不能传送较多的信息。内存块是存放较多信息的重要手段,但不支持全局内存句柄的共享。DDE正是建立在Windows内部消息系统、全局原子和共享全局内存基础上的一种协议,用来协调Windows应用程序之间的数据交换和命令调用。       DDE协议使用三级命名:服务(service)、主题(topic)和数据项(item)来标识DDE所传递的数据单元。服务使应用程序具有了提供给其他程序的数据交换能力,一般服务就是应用程序的文件名,如Word的服务就是是Winword(可执行文件是Winword.exe);主题是对服务器有意义的信息单元,对于Word文档就是很好的主题,许多服务器都有默认的主题System,但无法知道服务器确切有那些主题,除非查阅应用程序的相关技术文档。每次DDE客户与服务程序之间的对话都是先由客户启动的,所以在每次客户启动之前,DDE服务器必须先投入运行,下面是一个典型的DDE会话流程的事务组成: 
          。客户程序自动会话,服务器程序响应。 
          。客户和服务器用下述方法交换数据: 
          。服务器应客户的请求向客户发送数据; 
          。客户主动想服务器发送数据; 
          。客户要求服务器在数据修改时发送数据(热数据连接); 
          。客户要求服务器在数据修改后发送通知(温数据连接); 
          。在客户的要求下,服务器执行一个命令。 
          。由客户或服务器中止会话。       三、 设计思路       首先,在开发工具的选择上,选择了提供有现成的DDE 系列组件的 Borland Delphi 5.0。既然以Microsoft 
          Word作为要连接的服务器,在与其建立连接之前要先设定好连接的服务与主题,由于本例只要求通过本程序控制Word的一些操作动作,如打开新文件、关闭文件、插入表格等等,所以可以分别设定这两项为:"Winword"和"System",当设置好连接后就可以通过Delphi提供的DDEClientConv组件的OpenLink函数打开与这个服务的连接,剩下的工作就是向Word服务器发送宏命令,并通过组件向其发送执行宏的命令即可,用该组件的函数ExecuteMacro来实现之。       四、程序的实现       (一) 加入DDE客户端组件       新建一App工程WordDDE,然后在Component 
          Palette组件条的System属性页里选择DdeClientConv组件,并把它拖放到窗体上。修改其Name 属性为DDEClient。       (二) 添加同DDE服务进行交互的代码       在工程上添加一个过程RunMacro,用于打开同Word服务器的链接,并通知服务器执行由Macro标识的宏命令,让Word按用户的意图完成响应的动作。完成之后由客户方断开这次连接,完成一次会话。下面是上述过程的实现代码: 
          procedure TForm1.RunMacro(Macro:pChar); 
          var pMacro:array[0..80] of Char; 
          begin 
          DDEClient.SetLink('Winword','System');{设置连接} 
          DDEClient.OpenLink;{按设置打开连接} 
          StrPCopy(pMacro,Macro); 
          if Not DDEClient.ExecuteMacro(pMacro,false) then{执行宏命令} 
          ShowMessage('Unable to Execute Macro'); 
          DDEClient.CloseLink;{断开连接} 
          end;       (三) 宏命令的执行       宏(Macro)是客户程序要服务器完成的一些操作指令,对与特定的Microsoft Word 
          而言无非是些打开文件、插入分割符、复制粘贴字符等一些字处理方面的宏命令,这些宏命令完成的功能大多在Word的菜单下都能找到与之相匹配的菜单。如"关闭文件"菜单完成的功能就可以通过宏[FileClose]来完成。可以向窗口添加一个按钮或是菜单然后在其处理函数中添加执行宏的代码如下:       procedure TForm1.N2Click(Sender: TObject); 
          begin 
          RunMacro('[FileNew]');{让Word创建一个新文件,宏[FileNew]由函数RunMacro通知Word} 
          end;       Word下有许多可供传送执行的宏命令,现将一些常用的宏罗列如下,以备实际编程时选用:       [FileNew] …… 创建新文件 
          [FileClose] …… 关闭文件 
          [FileSave] …… 保存文件 
          [FilePrint] …… 打印文件 
          [FileExit] …… 退出Word 
          [File1] …… 打开最近打开的文件,相应还有[File2]、[File3]等等 
          [EditCut] …… 剪切操作  
          [EditCopy] …… 复制操作 
          [EditPaste] …… 粘贴操作 
          [EditUndo] …… 恢复上一步 
          [EditRedo] …… 重做上一步 
          [EditClear] …… 清除操作 
          [EditSelectAll] …… 全选操作 
          [ViewNormal] …… 正常视图 
          [ViewPage] …… 页面视图 
          [ViewOutLine] …… 大纲视图 
          [InsertBreak] …… 插入分割符 
          [InsertIndex] …… 插入索引 
          [FormatNumber] …… 格式化项目符号和编号 
          [ToolsOptions] …… 工具的选项 
          [TableInsertTable] …… 插入表格 
          [TableInsertRow] …… 插入行 
          [TableDeleteRow] …… 删除行 
          [TableSplit] …… 拆分表格 
          [TableSelectRow] …… 选择行 
          [TableSelectColumn] …… 选择列 
          [TableSelectTable] …… 选择表格 
          [TableSort] …… 排序 
          [WindowNewWindow] …… 新建窗口 
          [Window1] …… 最近打开的窗口,响应还有[Window2]、[Window3]等等 
          [HelpIndex] …… 帮助的索引 
          [HelpAbout] …… 帮助的关于       小结:DDE技术向用户提供了一种更加集成的工作环境,最适合于不需要用户参与的动态数据交换。 
          通过上述这个例子,对DDE 的工作原理和编程思想有了一定的认识之后,可以用类似的方法实现同其他程序如Microsoft 
          Execl的DDE动态交互。该程序在Windows 98下,由Borland Delphi 5.0编译通过。 
      

  5.   

    一、前 言
     
      玩过 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;interfaceuses
    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、本例只是在特殊情况下的一种应用,若要打印大量数据标签,制作表格,本人觉得还是用报表灵活一些。
     
    小辉
      

  6.   

    一、VBA代码含义
    Microsoft Word是一个集成化环境,是美国微软公司的字处理系统,但是它决不仅仅是一个字处
    理系统,它集成了Microsoft Visual Basic,可以通过编程来实现对Word功能的扩展。
    Microsoft Visual Basic在word中的代码即Word的宏,通过编写Word宏,可实现一些文档处理的
    自动化,如实现文档的自动备份、存盘等,可扩展Word文档的功能,因此,能够充分利用Word的
    特性,甚至使Word成为自己软件的一部分。
    Word的宏既有有利的一部分,因为它能够帮助我们实现文档的自动化,但是Word的宏也不是纯粹
    的有利,有时它可能危害我们的文档、计算机系统甚至网络,从最开始的Taiwan NO1宏病毒到现
    在的Melissa宏病毒,从最开始的简单的提示,耗尽系统资源到现在的乱发电子邮件,将个人的
    信息发送到网络上,甚至向硬盘的Autoexec.bat(自动批处理文件)中添加Deltree C: -y,破坏
    整个Windows系统。
    二、Word中内嵌的Com技术
    可以说Word是对Com技术支持最好的软件,这样说似乎是太极端了一点,但是Word提供的强大的编
    程接口技术却能够是我们通过程序控制Word的任何一部分。无论是文件的打开、存盘、打印还是文
    档中表格的自动绘制。
    通过编程软件,可以灵活的操纵word,这里只以Borland Delphi为例,进行详细描述:
    1、 在Delphi中调用Word软件/文件的方法
    在Word中调用Word软件,归纳起来有三种方法:
    。通过Delphi的控件TOleContainer 将Word嵌入
    a.使用Delphi提供的Servers控件调用Word,使用Word的属性
    b.通过真正的Com技术,将Office软件目录中文件MSWORD9.OLB中的类库全部导入Delphi中,
    利用Com技术编程
    c.使用CreateOleObject将启动Word,然后以Ole方式对Word进行控制。
    2、 对几种方法的难易程度的判别
    a.通过Delphi的控件TOleContainer 将Word嵌入
    这是最简单的Ole嵌入,能够直接将Word文档调用,只需要使用ToleContainer.Run就可以将Word文
    档直接启动。且这样启动的Word文档与Delphi程序是一个整体(从界面上看),但是它存在不可克
    服的缺点,即不能通过Delphi控制Word文档,也就不能实现将灵活操纵Word的目的。
    b.使用Delphi提供的Servers控件调用Word,使用Word的属性
    使用Delphi的Servers控件来操纵Word,在编程时Delphi能够实现代码提示,总体上看能够较好的实
    现Delphi对Word的控制,但是还有一些Word的功能不能在Delphi中调用(比如自己编写的VBA宏代码)。
    且实现功能时本来在VBA代码中可选则参数在Delphi调用的时候必须添加,否则,连编译都不能通过。
    本方式启动的Word与Delphi程序分属两个窗体。
    此办法仅能作为一个参考。
    c.通过真正的Com技术,将Office软件目录中文件MSWORD9.OLB中的类库全部导入Delphi中,
    利用Com技术编程
    利用真正的Com技术,将MsWord9.OLD文件类库导入,然后利用Com技术进行使用。
    整体上类似使用Delphi的Servers控件,稍微比Servers控件麻烦,优缺点与Servers控件相同。
    d.使用CreateOleObject将启动Word,然后以Ole方式对Word进行控制。
    本办法是使用以CreateOleObjects方式调用Word,实际上还是Ole,但是这种方式能够真正做到完全
    控制Word文件,能够使用Word的所有属性,包括自己编写的VBA宏代码。
    与Servers控件和com技术相比,本方法能够真正地使用Word的各种属性,和在VBA中编写自己的代码
    基本一样,可以缺省的代码也不需要使用。
    本方式启动的Word与Delphi程序分属两个窗体。
    缺点是使用本方法没有Delphi代码提示,所有异常处理均需要自己编写,可能编写时探索性知识比较多。
    三、Word宏编辑器
    Word能够真正地进行VBA代码的编辑,可以编写窗体、函数。
    进入Word宏编辑器的方法:工具->宏->Visual Basic编辑器,可进入Visual Basic编辑器界面。
    Word的Visual Basic编辑器界面和真正的Visual Basic编辑器基本相同,在此不再向详述。
    在VBA代码中,可以添加用户窗体、模块、类模块。用户窗体、模块、类模块的概念和Visual Basic
    完全相同。注释也与Visual Basic完全相同。
    可以将光标停留在窗体、模块的任何一个子程序上,直接按“F5”运行当前子程序。
    四、Word的宏的概述
    Word充分地将文档编辑和VB结合起来,真正地实现文档的自动化。使用Word编程,类似于使用
    Visual Basic,所不同的是,在Word中,能够直接运行某一个子程序,直接看见结果,Word的宏,
    只能解释运行,而Visual Basic,现在已经能够编写成真正的机器码,从代码的保护上来说,应该尽
    可能地减少Word的VBA代码数量,尤其是关键的代码。
    VBA宏,可分成四种:
    1、 和命令名相同的宏
    如FileSave,FileOpen,如果在VBA代码中包含与Word同名的函数,则直接执行这些VBA代码,忽略Word
    本身的命令。
    2、 Word内特定的宏
    这些宏包含AutoExec(启动 Word 或加载全局模板)、AutoNew(每次新建文档时)、AutoOpen(每次打
    开已有文档时)、AutoClose(每次关闭文档时),AutoExit(退出 Word 或卸载全局模板时)。
    如果VBA代码中含有这些名称的函数,则满足相应的条件,相应代码就自动执行。
    3、 相应事件的VBA宏
    这些宏是由事件触发的宏,如Document_Close在文档关闭的时候触发事件,Document_New在新建文档的时
    候触发,Document_Open在打开文档的时候触发。
    4、 独立的宏
    自己编写的VBA代码,即不属于上面几种情况的VBA代码,可以被其他VBA代码调用,更重要的是,可以被
    其他程序调用。
    这样,我们就可以屏弃Word自动执行的宏,通过Delphi直接调用相应宏来达到目的。
    五、Word命令宏的详细描述
    Word本身的命令函数包含很多,但是无论是word联机帮助还是MSDN帮助,都没有这方面的介绍,因此只能
    凭自己的实验取探索,初步探测的函数如下:
    宏名 解释 注释
    FileNew 新建
    FileNewDefault 新建空白文档
    FileSaveAs 另存为
    FileOpen 打开
    FileClose 关闭
    FilePrint 打印
    FilePrintPreview 打印预览
    ToolsCustomize 工具栏里面的自定义
    ToolsOptions 工具选项
    ToolsRevisions 突出显示修订
    ToolsReviewRevisions 接受或拒绝修订
    ToolsRevisionMarksAccept 接受修订
    ToolsRevisionMarksReject 拒绝修订
    ToolsRevisionMarksToggle 修订
    ToolsMacro 宏
    ToolsRecordMacroToggle 录制新宏
    ViewSecurity 安全性
    ViewVBCode 查看VB编辑器环境
    FileTemplates 模板和可加载项
    ToolsProtectUnprotectDocument 解除对文档的保护
    InsertHyperlink 插入超级链接
    EditHyperlink 编辑超级链接
    DeleteHyperlink 删除超级链接
    EditLinks 查看、删除链接
    EditPasteAsHyperlink 粘贴超级链接
    FormatStyle 样式
    EditBookMark 书签
    一、Delphi程序启动Word
    采用CreateOleObjects的方法来启动Word,调用VBA代码,具体实现过程为:
    首先使用GetActiveOleObject('Word.Application')判断当前内存中是否存在Word程序,如果存在,
    则直接连接,如果没有Word程序,则使用CreateOleObject('Word.Application')启动Word
    二、Delphi程序新建Word文稿
    格式:WordDocuments.Add(Template,NewTemplate,DocumentType,Visible)
    Template: 使用模板的名称,
    NewTemplate: 新建文档的类型,True表示为模板,False表示为文档
    DocumentType: 文档类型,默认为空白文档
    Visible: 打捞的窗口是否可见
    举例:Doc_Handle:=Word_Ole.Documents.Add(Template:='C:\Temlate.dot',NewTemplate:=False);
    三、Delphi程序打开Word文稿
    格式:WordDocuments.Open(FileName,ConfirmConversions,ReadOnly,PassWordDocument,
                             PasswordTemplate,Revent,WritePasswordDocument,WritePassWordTemplate,
                             Format,Encoding,Visible)
    FileName: 文档名(包含路径)
    Confirmconversions: 是否显示文件转换对话框
    ReadOnly: 是否以只读方式打开文档
    AddToRecentFiles: 是否将文件添加到"文件"菜单底部的最近使用文件列表中
    PassWordDocument: 打开此文档时所需要的密码
    PasswordTemplate: 打开此模板时所需要的密码
    Revert: 如果文档已经,是否重新打开文档
    WritePasswordDocument: 保存对文档更改时所需要的密码
    WritePasswordTemplate: 保存对模板进行更改时所需要的密码
    Format: 打开文档时所需使用的文件转换器
    Encoding: 所使用的文档代码页
    Visible:  打开文档的窗口是否可见
    举例:
    Doc_Handle:=Word_Ole.Documents.open(FileName:=Doc_File,ReadOnly:=False,
                AddToRecentFiles:=False);
    四、Delphi程序保存Word文稿
    格式:WordDocuments.SaveAs(FileName, FileFormat, LockComments, Password,
                              AddToRecentFiles, WritePassword, ReadOnlyRecommended, 
                              EmbedTrueTypeFonts, SaveNativePictureFormat, SaveFormsData, 
                              SaveAsAOCELetter)
    FileName:              文件名。默认为当前文件夹和文件名。
    FileFormat              文档保存的格式。
    LockComments            如果为 True,则此文档只允许进行批注。
    Password                打开文档时的口令。
    AddToRecentFiles        如果为True,则将文档添至"文件"菜单中最近使用的文档列表中。
    WritePassword           保存对文档的修改所需的口令。
    ReadOnlyRecommended     如果为 True,在每次打开文档时,Word 将建议用户采用只读方式。
    EmbedTrueTypeFonts      如果为 True,则将文档与 TrueType 字体一起保存。
    SaveNativePictureFormat 如果为 True,则从其他系统平台(例如 Macintosh)导入的图形仅保存其 Windows 版本。
    SaveFormsData           如果为 True,则将窗体中用户输入的数据存为一条数据记录。
    SaveAsAOCELetter        如果文档包含一个附加,
      

  7.   

    给你一篇绝对有用的文章,是MSDN里的。我就是通过这篇东西开始学用Delphi控制Office的。HOWTO: Automate Word 97 to Perform Mail Merge from Delphi
    ID: Q229310 SUMMARY
    This article demonstrates how to create and manipulate a Word 97 document using Automation from Delphi. 
    unit Unit1;
    interface
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure InsertLines(LineNum : Integer);
        procedure CreateMailMergeDataFile;
        procedure FillRow(Doc : Variant; Row : Integer;
                     Text1,Text2,Text3,Text4 : String);
      private
        { Private declarations }
      public
        wrdApp, wrdDoc: Variant;
        { Public declarations }
      end;var
      Form1: TForm1;implementationuses ComObj;Const wdAlignParagraphLeft = 0;
    Const wdAlignParagraphCenter = 1;
    Const wdAlignParagraphRight = 2;
    Const wdAlignParagraphJustify = 3;
    Const wdAdjustNone = 0;
    Const wdGray25 = 16;
    Const wdGoToLine = 3;
    Const wdGoToLast = -1;
    Const wdSendToNewDocument = 0;{$R *.DFM}procedure TForm1.InsertLines(LineNum : Integer);
    var
      iCount : Integer;
    begin
      for iCount := 1 to LineNum do
         wrdApp.Selection.TypeParagraph;
    end;procedure TForm1.FillRow(Doc : Variant; Row : Integer;
                     Text1,Text2,Text3,Text4 : String);
    begin
      Doc.Tables.Item(1).Cell(Row,1).Range.InsertAfter(Text1);
      Doc.Tables.Item(1).Cell(Row,2).Range.InsertAfter(Text2);
      Doc.Tables.Item(1).Cell(Row,3).Range.InsertAfter(Text3);
      Doc.Tables.Item(1).Cell(Row,4).Range.InsertAfter(Text4);
    end;procedure TForm1.CreateMailMergeDataFile;
    var
      wrdDataDoc : Variant;
      iCount : Integer;
    begin
      // Create a data source at C:\DataDoc.doc containing the field data
      wrdDoc.MailMerge.CreateDataSource('C:\DataDoc.doc',,,'FirstName, LastName,' +
           ' Address, CityStateZip');
      // Open the file to insert data
      wrdDataDoc := wrdApp.Documents.Open('C:\DataDoc.doc');
      for iCount := 1 to 2 do
        wrdDataDoc.Tables.Item(1).Rows.Add;
      // Fill in the data
      FillRow(wrdDataDoc, 2, 'Steve', 'DeBroux',
            '4567 Main Street', 'Buffalo, NY  98052');
      FillRow(wrdDataDoc, 3, 'Jan', 'Miksovsky',
            '1234 5th Street', 'Charlotte, NC  98765');
      FillRow(wrdDataDoc, 4, 'Brian', 'Valentine',
            '12348 78th Street  Apt. 214', 'Lubbock, TX  25874');
      // Save and close the file
      wrdDataDoc.Save;
      wrdDataDoc.Close(False);
    end;
      

  8.   

    接上面
    procedure TForm1.Button1Click(Sender: TObject);
    var
      StrToAdd : String;
      wrdSelection, wrdMailMerge, wrdMergeFields : Variant;
    begin
      // Create an instance of Word and make it visible
      wrdApp := CreateOleObject('Word.Application');
      wrdApp.Visible := True;
      // Create a new document
      wrdDoc := wrdApp.Documents.Add();
      wrdDoc.Select;  wrdSelection := wrdApp.Selection;
      wrdMailMerge := wrdDoc.MailMerge;  // Create MailMerge data file
      CreateMailMergeDataFile;  // Create a string and insert it into the document
      StrToAdd := 'State University' + Chr(13) +
                  'Electrical Engineering Department';
      wrdSelection.ParagraphFormat.Alignment := wdAlignParagraphCenter;
      wrdSelection.TypeText(StrToAdd);  InsertLines(4);  // Insert Merge Data
      wrdSelection.ParagraphFormat.Alignment := wdAlignParagraphLeft;
      wrdMergeFields := wrdMailMerge.Fields;
      wrdMergeFields.Add(wrdSelection.Range,'FirstName');
      wrdSelection.TypeText(' ');
      wrdMergeFields.Add(wrdSelection.Range,'LastName');
      wrdSelection.TypeParagraph;
      wrdMergeFields.Add(wrdSelection.Range,'Address');
      wrdSelection.TypeParagraph;
      wrdMergeFields.Add(wrdSelection.Range,'CityStateZip');  InsertLines(2);  // Right justify the line and insert a date field with
      // the current date
      wrdSelection.ParagraphFormat.Alignment := wdAlignParagraphRight;
      wrdSelection.InsertDateTime('dddd, MMMM dd, yyyy',False);  InsertLines(2);  // Justify the rest of the document
      wrdSelection.ParagraphFormat.Alignment := wdAlignParagraphJustify;  wrdSelection.TypeText('Dear ');
      wrdMergeFields.Add(wrdSelection.Range,'FirstName');
      wrdSelection.TypeText(',');
      InsertLines(2);  // Create a string and insert it into the document
      StrToAdd := 'Thank you for your recent request for next ' +
          'semester's class schedule for the Electrical ' +
          'Engineering Department.  Enclosed with this ' +
          'letter is a booklet containing all the classes ' +
          'offered next semester at State University.  ' +
          'Several new classes will be offered in the ' +
          'Electrical Engineering Department next semester.  ' +
          'These classes are listed below.';
      wrdSelection.TypeText(StrToAdd);  InsertLines(2);  // Insert a new table with 9 rows and 4 columns
      wrdDoc.Tables.Add(wrdSelection.Range,9,4);
      wrdDoc.Tables.Item(1).Columns.Item(1).SetWidth(51,wdAdjustNone);
      wrdDoc.Tables.Item(1).Columns.Item(2).SetWidth(170,wdAdjustNone);
      wrdDoc.Tables.Item(1).Columns.Item(3).SetWidth(100,wdAdjustNone);
      wrdDoc.Tables.Item(1).Columns.Item(4).SetWidth(111,wdAdjustNone);
      // Set the shading on the first row to light gray
      wrdDoc.Tables.Item(1).Rows.Item(1).Cells
          .Shading.BackgroundPatternColorIndex := wdGray25;
      // BOLD the first row
      wrdDoc.Tables.Item(1).Rows.Item(1).Range.Bold := True;
      // Center the text in Cell (1,1)
      wrdDoc.Tables.Item(1).Cell(1,1).Range.Paragraphs.Alignment :=
            wdAlignParagraphCenter;  // Fill each row of the table with data
      FillRow(wrdDoc, 1, 'Class Number', 'Class Name', 'Class Time', 
         'Instructor');
      FillRow(wrdDoc, 2, 'EE220', 'Introduction to Electronics II',
         '1:00-2:00 M,W,F', 'Dr. Jensen');
      FillRow(wrdDoc, 3, 'EE230', 'Electromagnetic Field Theory I',
         '10:00-11:30 T,T', 'Dr. Crump');
      FillRow(wrdDoc, 4, 'EE300', 'Feedback Control Systems',
         '9:00-10:00 M,W,F', 'Dr. Murdy');
      FillRow(wrdDoc, 5, 'EE325', 'Advanced Digital Design',
         '9:00-10:30 T,T', 'Dr. Alley');
      FillRow(wrdDoc, 6, 'EE350', 'Advanced Communication Systems',
         '9:00-10:30 T,T', 'Dr. Taylor');
      FillRow(wrdDoc, 7, 'EE400', 'Advanced Microwave Theory',
         '1:00-2:30 T,T', 'Dr. Lee');
      FillRow(wrdDoc, 8, 'EE450', 'Plasma Theory',
         '1:00-2:00 M,W,F', 'Dr. Davis');
      FillRow(wrdDoc, 9, 'EE500', 'Principles of VLSI Design',
         '3:00-4:00 M,W,F', 'Dr. Ellison');  // Go to the end of the document
      wrdApp.Selection.GoTo(wdGotoLine,wdGoToLast);
      InsertLines(2);  // Create a string and insert it into the document
      StrToAdd := 'For additional information regarding the ' +
                 'Department of Electrical Engineering, ' +
                 'you can visit our website at ';
      wrdSelection.TypeText(StrToAdd);
      // Insert a hyperlink to the web page
      wrdSelection.Hyperlinks.Add(wrdSelection.Range,'http://www.ee.stateu.tld');
      // Create a string and insert it into the document
      StrToAdd := '.  Thank you for your interest in the classes ' +
                 'offered in the Department of Electrical ' +
                 'Engineering.  If you have any other questions, ' +
                 'please feel free to give us a call at ' +
                 '555-1212.' + Chr(13) + Chr(13) +
                 'Sincerely,' + Chr(13) + Chr(13) +
                 'Kathryn M. Hinsch' + Chr(13) +
                 'Department of Electrical Engineering' + Chr(13);
      wrdSelection.TypeText(StrToAdd);  // Perform mail merge
      wrdMailMerge.Destination := wdSendToNewDocument;
      wrdMailMerge.Execute(False);  // Close the original form document
      wrdDoc.Saved := True;
      wrdDoc.Close(False);  // Notify the user we are done.
      ShowMessage('Mail Merge Complete.');  // Clean up temp file
      DeleteFile('C:\DataDoc.doc');
    end;end. 
      

  9.   

    接上面的:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      StrToAdd : String;
      wrdSelection, wrdMailMerge, wrdMergeFields : Variant;
    begin
      // Create an instance of Word and make it visible
      wrdApp := CreateOleObject('Word.Application');
      wrdApp.Visible := True;
      // Create a new document
      wrdDoc := wrdApp.Documents.Add();
      wrdDoc.Select;  wrdSelection := wrdApp.Selection;
      wrdMailMerge := wrdDoc.MailMerge;  // Create MailMerge data file
      CreateMailMergeDataFile;  // Create a string and insert it into the document
      StrToAdd := 'State University' + Chr(13) +
                  'Electrical Engineering Department';
      wrdSelection.ParagraphFormat.Alignment := wdAlignParagraphCenter;
      wrdSelection.TypeText(StrToAdd);  InsertLines(4);  // Insert Merge Data
      wrdSelection.ParagraphFormat.Alignment := wdAlignParagraphLeft;
      wrdMergeFields := wrdMailMerge.Fields;
      wrdMergeFields.Add(wrdSelection.Range,'FirstName');
      wrdSelection.TypeText(' ');
      wrdMergeFields.Add(wrdSelection.Range,'LastName');
      wrdSelection.TypeParagraph;
      wrdMergeFields.Add(wrdSelection.Range,'Address');
      wrdSelection.TypeParagraph;
      wrdMergeFields.Add(wrdSelection.Range,'CityStateZip');  InsertLines(2);  // Right justify the line and insert a date field with
      // the current date
      wrdSelection.ParagraphFormat.Alignment := wdAlignParagraphRight;
      wrdSelection.InsertDateTime('dddd, MMMM dd, yyyy',False);  InsertLines(2);  // Justify the rest of the document
      wrdSelection.ParagraphFormat.Alignment := wdAlignParagraphJustify;  wrdSelection.TypeText('Dear ');
      wrdMergeFields.Add(wrdSelection.Range,'FirstName');
      wrdSelection.TypeText(',');
      InsertLines(2);  // Create a string and insert it into the document
      StrToAdd := 'Thank you for your recent request for next ' +
          'semester's class schedule for the Electrical ' +
          'Engineering Department.  Enclosed with this ' +
          'letter is a booklet containing all the classes ' +
          'offered next semester at State University.  ' +
          'Several new classes will be offered in the ' +
          'Electrical Engineering Department next semester.  ' +
          'These classes are listed below.';
      wrdSelection.TypeText(StrToAdd);  InsertLines(2);  // Insert a new table with 9 rows and 4 columns
      wrdDoc.Tables.Add(wrdSelection.Range,9,4);
      wrdDoc.Tables.Item(1).Columns.Item(1).SetWidth(51,wdAdjustNone);
      wrdDoc.Tables.Item(1).Columns.Item(2).SetWidth(170,wdAdjustNone);
      wrdDoc.Tables.Item(1).Columns.Item(3).SetWidth(100,wdAdjustNone);
      wrdDoc.Tables.Item(1).Columns.Item(4).SetWidth(111,wdAdjustNone);
      // Set the shading on the first row to light gray
      wrdDoc.Tables.Item(1).Rows.Item(1).Cells
          .Shading.BackgroundPatternColorIndex := wdGray25;
      // BOLD the first row
      wrdDoc.Tables.Item(1).Rows.Item(1).Range.Bold := True;
      // Center the text in Cell (1,1)
      wrdDoc.Tables.Item(1).Cell(1,1).Range.Paragraphs.Alignment :=
            wdAlignParagraphCenter;  // Fill each row of the table with data
      FillRow(wrdDoc, 1, 'Class Number', 'Class Name', 'Class Time', 
         'Instructor');
      FillRow(wrdDoc, 2, 'EE220', 'Introduction to Electronics II',
         '1:00-2:00 M,W,F', 'Dr. Jensen');
      FillRow(wrdDoc, 3, 'EE230', 'Electromagnetic Field Theory I',
         '10:00-11:30 T,T', 'Dr. Crump');
      FillRow(wrdDoc, 4, 'EE300', 'Feedback Control Systems',
         '9:00-10:00 M,W,F', 'Dr. Murdy');
      FillRow(wrdDoc, 5, 'EE325', 'Advanced Digital Design',
         '9:00-10:30 T,T', 'Dr. Alley');
      FillRow(wrdDoc, 6, 'EE350', 'Advanced Communication Systems',
         '9:00-10:30 T,T', 'Dr. Taylor');
      FillRow(wrdDoc, 7, 'EE400', 'Advanced Microwave Theory',
         '1:00-2:30 T,T', 'Dr. Lee');
      FillRow(wrdDoc, 8, 'EE450', 'Plasma Theory',
         '1:00-2:00 M,W,F', 'Dr. Davis');
      FillRow(wrdDoc, 9, 'EE500', 'Principles of VLSI Design',
         '3:00-4:00 M,W,F', 'Dr. Ellison');  // Go to the end of the document
      wrdApp.Selection.GoTo(wdGotoLine,wdGoToLast);
      InsertLines(2);  // Create a string and insert it into the document
      StrToAdd := 'For additional information regarding the ' +
                 'Department of Electrical Engineering, ' +
                 'you can visit our website at ';
      wrdSelection.TypeText(StrToAdd);
      // Insert a hyperlink to the web page
      wrdSelection.Hyperlinks.Add(wrdSelection.Range,'http://www.ee.stateu.tld');
      // Create a string and insert it into the document
      StrToAdd := '.  Thank you for your interest in the classes ' +
                 'offered in the Department of Electrical ' +
                 'Engineering.  If you have any other questions, ' +
                 'please feel free to give us a call at ' +
                 '555-1212.' + Chr(13) + Chr(13) +
                 'Sincerely,' + Chr(13) + Chr(13) +
                 'Kathryn M. Hinsch' + Chr(13) +
                 'Department of Electrical Engineering' + Chr(13);
      wrdSelection.TypeText(StrToAdd);  // Perform mail merge
      wrdMailMerge.Destination := wdSendToNewDocument;
      wrdMailMerge.Execute(False);  // Close the original form document
      wrdDoc.Saved := True;
      wrdDoc.Close(False);  // Notify the user we are done.
      ShowMessage('Mail Merge Complete.');  // Clean up temp file
      DeleteFile('C:\DataDoc.doc');
    end;end.