if WordApp.Visible=false  then //运行Word,并新建一文档
         WordApp.Visible:=true;
     filename:='';
     tempboolean:=false;
     WordApp.Documents.Add(filename,tempboolean);     if wordtype.radiogroup1.ItemIndex=0 then
       WordApp.ActiveDocument.PageSetup.Orientation:=wdOrientLandscape;//将纸张调为横向
     with WordApp.Selection do//将标题写入Word文档
       begin
            Paragraphs.Alignment:=1;
            Font.Size:=20;
            Font.Bold:=1;
            TypeText(panel12.Caption);
       end;

解决方案 »

  1.   

    要WORDAPPLICATION的过程与函数的说明你最好是到MSDN去找了!你也可以用OFFICE的VBA来查询这些函数及文档!
      

  2.   

    给你一段代码自己看吧
    //在Form1里加入一个System部件集里的TDdeClientCov部件,取名为DdeExample,将其ConnectMode设为ddeManual(手动方式);
    //将DdeService设为‘(WinWord)’;将ServiceApplication设为‘WinWord’。  // 2)编写一个自定义过程,以激活Word,如下:procedure Tform1.WordActive(Cmds: TStrings);
      
    var
         WordPath: string;
    begin   
      if (not DdeExample.OpenLink) then {判断是否巳动态链接}    
      begin   
        if (FindWindow('OpusApp', nil) = 0) then   
        begin   WordPath := 'C:\msoffice\winword';
             if(WordPath = '') then
              ShowMessage('中文Word未安装或未设置路径,请安装设置Word中文 版。')
               else begin
             DdeExample.ServiceApplication := WordPath + '\Winword.exe';
             if(DdeExample.OpenLink) then
            {如果巳动态链接执行宏命令}   
            DdeExample.ExecuteMacroLines(Cmds, False)
            else
        ShowMessage('无法启动Word中文版!');
          DdeExample.ServiceApplication := 'WinWord.exe';
          end;else begin {如果巳动态链接执行宏命令}   
         DdeExample.ExecuteMacroLines(Cmds, False);
          
      end;
        
        end   else   
      DdeExample.ExecuteMacroLines(Cmds, false);
        
    end;
       //在private声明区里加入如下:   //procedure ActiveWord(Cmds: TStrings);
     
    // 3)在Form1中加入一个按钮Button1,在其onclick事件里写如下代码:  procedure TForm1.Button1Click(Sender: TObject);
      
    var
        Cmds: TStringList; {创建Cmds}
        
        TempItem1, TempItem2: string;
        
    begin   
      cmds := TStringList.Create;
        
        cmds.Clear;
        TempItem1 := '数据项一';
        TempItem2 := '数据项二';
       
         with Cmds do
          begin
          Clear;
        Add('[FileNew.Template ="Example.Dot″]'); {打开模板文件Example.Dot}
        Add('[AppMaximize]'); {文档最大化}
        Add('[SetFormResult"Item1″,″' + TempItem1 + '″]');
          {将数据TempItem1传给表单域Item1}
        Add('[SetFormResult"Item2″,″' + TempItem2 +
        '″]);{将数据TempItem2传给表单域Item2}
          end;   WordActive(DdeExample, Cmds); {调用自定义过程}   Cmds.Free;
            {释放Cmds}   
    end;//  运行这个程序,单击Button1
      

  3.   

    Delphi与Word之间的融合技术 (0分)
    一、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 书签  
    yzhshi (2001-11-18 17:54:00)  
    这是我自己写的,结合自己的经验,在这里贡献出来,供大家共享。
    里面有很多用词、观点也许不是特别确切,希望大家指出。
    过几天再将一些具体的代码写出来(目前没有仔细整理)。 
     
    yzhshi (2001-11-18 18:03:00)  
    [center]OleWord时一些用用的代码[/center]
    [center][email protected][/center]一、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文稿
    <br />格式:WordDocuments.SaveAs(FileName, FileFormat, LockComments, Password,
    <br />                          AddToRecentFiles, WritePassword, ReadOnlyRecommended, 
    <br />                          EmbedTrueTypeFonts, SaveNativePictureFormat, SaveFormsData, 
    <br />                          SaveAsAOCELetter)
    <br />
    <br />FileName:              文件名。默认为当前文件夹和文件名。
    <br />FileFormat              文档保存的格式。
    <br />LockComments            如果为 True,则此文档只允许进行批注。
    <br />Password                打开文档时的口令。
    <br />AddToRecentFiles        如果为True,则将
      

  4.   


    SaveFormsData           如果为 True,则将窗体中用户输入的数据存为一条数据记录。
    <br />SaveAsAOCELetter        如果文档包含一个附加,当此属性值为 True 时,将文档存为一篇 AOCE 信笺(同时保存邮件)。
    <br />
    <br />举例:
    <br />Word_Ole.Documents.SaveAs(FileName:=Doc_File,FileFormat=wdFormatDocument,
    <br />                          AddToRecentFiles=False);
    <br />
    <br />五、从数据库读取文件到本地硬盘和从本地硬盘读取文件到数据库
    <br />
    <br />在数据库上使用Image二进制字段保存,使用Stream流的方式。
    <br />
    <br />创建文件流:
    <br />     Word_FileStream:=TFileStream.Create(Target_Name,fmOpenWrite or fmCreate);
    <br />     Word_FileStream.Position:=0;
    <br />
    <br />保存到数据库的Image字段:
    <br />     TBlobField(AdoQuery1.FieldByName(Column_Name)).SaveToStream(Word_FileStream);
    <br />
    <br />从数据库读取文件到本地硬盘:
    <br />     TBlobField(ADOQuery1.FieldByName(Column_Name)).loadfromStream(Word_FileStream);
    <br />
    <br />释放文件流:
    <br />     Word_FileStream.Free;
    <br />
    <br />六、全局消息的定义
    <br />因为word和Delphi程序是两个软件,相互之间通讯比较麻烦,所以使用全局消息的方法进行。
    <br />全局消息必须首先注册,Windows返回系统空闲的消息号,当注册的消息相同时,
    <br />Windows系统返回同一个值,这样就保证了使用这个消息号在两个程序之间通讯。
    <br />
    <br />定义消息的办法:
    <br />    szMessageString: pchar = 'XIDIAN_11_Stone';
    <br />    FMyJoinMessage := RegisterWindowMessage(szMessageString);
    <br />
    <br />发送消息的方法:
    <br />    SendMessage(对方句柄,消息,消息附带短变量,消息附带长变量)
    <br />
    <br />七、Delphi程序接收消息的方法
    <br />    Delphi接收消息有两种,一是重载特定消息,二是重载WndProc函数,在里面选择相应消息进行处理。
    <br />    法一,每次只能处理一条消息,而法二能够同时处理多条消息。
    <br />
    <br />    对于法二,声明如下:
    <br />       procedure WndProc(var Message: TMessage);override
    <br />     必须注意,使用时需要在处理完自己消息处理后继承WndProc(Message)函数,否则系统会崩溃!
    <br />
    <br />八、Word中Combo对话框的动态生成以及Change事件
    <br />    建立类模块Combohander,在内部定义事件
    <br />      Public WithEvents ComboBoxEvent As Office.CommandBarComboBox
    <br />
    <br />    定义Combo控件产生事件的模块
    <br />      Dim ctlComboBoxHandler As New ComboBoxHandler
    <br />
    <br />    产生Combo对话框
    <br />      Set Cbo_ChooseDoc = CommandBars("添加的菜单").Controls.Add(Type:=msoControlComboBox, Temporary:=True)
    <br />
    <br />    进行文件句柄设置,以产生Combo_Change事件
    <br />      Set ctlComboBoxHandler.ComboBoxEvent = Cbo_ChooseDoc 
    <br />
    <br />    产生事件后,在类模块Combohander内选择ComboBoxEvent的Change事件,即可书写事件代码
    <br />      Sub ComboBoxEvent_Change(ByVal Ctrl As Office.CommandBarComboBox)
    <br />
    <br />九、一些Word的事件
    <br />    VBA代码中处理的Word事件有:Document_Close
    <br />    Application事件中需要处理的有:DocumentBeforeClose,DocumentChange。
    <br />
    <br />    Document_Close:事件在文档关闭时产生事件
    <br />    DocumentBeforeClose:在文档被关闭以前先于Word判断文档是否保存,给出相应提示并进行相应处理。
    <br />    DocumentChange:文档切换,在文档从自己修改的文稿和其他人修改的文稿之间切换产生事件,
    <br />主要处理设置文档权限等。
      

  5.   

    谢谢!
    如何去打开一个已存在的WORD文档,并直接控制WORD菜单中某项的可视或不可视.
      

  6.   

    启动word时用如下代码: 
    begin
    try 
    wordapplication.connect; 
    except 
    messagedlg('word may not be installed', mterror, [mbok], 0); 
    abort; 
    end; 
    wordapplication.visible := true; 
    wordapplication.caption := 'delphi automation'; 
    end; 关闭word用如下代码。如果想保存doc文件,请修改savechanges变量的内容: 
    var 
    savechanges, originalformat, routedocument: olevariant; 
    begin 
    savechanges := wddonotsavechanges; 
    originalformat := unassigned; 
    routedocument := unassigned; 
    try 
    wordapplication.quit(savechanges, originalformat, routedocument); 
    wordapplication.disconnect; 
    except 
    on e: exception do 
    begin 
    showmessage(e.message); 
    wordapplication.disconnect; 
    end; 
    end; 
    end; 让word打开一个指定的文件,需要先放置opendialog,然后调用wordapplication.documents.open: 
    var 
    itemindex :olevariant; 
    filename, confirmconversions, readonly, addtorecentfiles, 
    passworddocument, passwordtemplate, revert, 
    writepassworddocument, writepasswordtemplate, format: olevariant; 
    begin 
    if not dlgopen.execute then 
    exit; {open document} 
    filename := dlgopen.filename; 
    confirmconversions := false; 
    readonly := false; 
    addtorecentfiles := false; 
    passworddocument := ''; 
    passwordtemplate := ''; 
    revert := true; 
    writepassworddocument := ''; 
    writepasswordtemplate := ''; 
    format := wdopenformatdocument; wordapplication.documents.open( filename, confirmconversions, 
    readonly, addtorecentfiles, passworddocument, passwordtemplate, 
    revert, writepassworddocument, writepasswordtemplate, format ); {assign worddocument component} 
    itemindex := 1; 
    worddocument.connectto(wordapplication.documents.item(itemindex)); {turn spell checking of because it takes a long time if enabled and slows down winword} 
    wordapplication.options.checkspellingasyoutype := false; 
    wordapplication.options.checkgrammarasyoutype := false; 
    end; 让word替换标记字符串要使用worddocument.range.find.execute,这里用delphi替换了<#name>: 
    var 
    findtext, matchcase, matchwholeword, matchwildcards, matchsoundslike, 
    matchallwordforms, forward, wrap, format, replacewith, replace: olevariant; 
    begin 
    findtext := '<#name>'; 
    matchcase := false; 
    matchwholeword := true; 
    matchwildcards := false; 
    matchsoundslike := false; 
    matchallwordforms := false; 
    forward := true; 
    wrap := wdfindcontinue; 
    format := false; 
    replacewith := 'delphi'; 
    replace := true; worddocument.range.find.execute( findtext, matchcase, matchwholeword, 
    matchwildcards, matchsoundslike, matchallwordforms, forward, 
    wrap, format, replacewith, replace ); end