我想用DELPHI新建一个word文档,代码如下:
   wordapplication1.Documents.Open('d:\word1.doc','','','','','','','','',
                                  '','');
   但是,它运行出错,请各位高手指教,如何新建word文档?
   还有那里可找到wordapplication1.ActiveDocument.Protect()过程的
   详细参数? 
   同时各位高手如果有关于操作word文档的代码,请给小弟
   一份。 
   给小弟解答问题的都有分加。

解决方案 »

  1.   

    uses ComObj ;
    procedure TForm1.Button1Click(Sender: TObject);
    var
      vWord,vDoc,vRange : Variant ;
      sText,sReplace : string ;
      lReturn : Boolean ;
    begin
      sText := 'ABCDEFG' ;  //原文字串
      sReplace := 'GFEDCBA' ; //新字串
      vWord := CreateOleObject('Word.Application') ;//创建Word线程
      try
        //打开要操作的文件
        vDoc := vWord.Documents.Open('C:\My Documents\AAAc.Doc');
        vDoc.Select ;  //选取中整个文档
        vRange := vDoc.Range ; //替换范围
        lReturn := True ;
        while lReturn do
        begin  //找到并替代成功则返回 True    共11个参数
          lReturn := vDoc.Range.Find.Execute(sText,,,,,,,,,sReplace,True) ;
        end ;
      finally
        vDoc.Close(True) ; //关闭文并保存
        vWord.Quit(False) ; //退出Word
      end ;
    end;
    Delphi 3 下通过。
      

  2.   

    读取和显示Word文档的VCL控件:
    http://www.ksdev.com/vcl/index.html
    http://vcl.vclxx.org/DELPHI/D32FREE/DATA2WRD.ZIP最近接触了一个用户的案例,用delphi控制word做一个合同管理程序。办公人员先根据业务需要,写好合同的文字,但在用户名称、产品名称等变化的位置填写指定的标记字符串,然后通过delphi把数据库中的实际数据替换掉word中的文字,最后让word打印出合同。 delphi自带了一个简单的word例题,但功能太简单。通过查找vba的说明,再对照delphi的vcl,编写了如下代码,实现了基本的公文管理功能。 启动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; 上面这4段代码完成了公文管理的基本功能,再把它和数据库结合起来,就可以开发一个与lotus notes类似的产品了。
      

  3.   

    Word宏和Delphi
    来自:yzhshi, 时间:2002-2-2 14:24:00, ID:902680 
    前面我就Delphi中调用Word写了一些,比较注重于具体实现,对于研究的方法则说的比较片面。
    今天晚上,我静下心来,总结了一下怎样在Delphi中生成操作Word的代码。如果说前面我写的
    是金子,那么下面这篇文章就是点石成金的手指(太自夸了,呵呵)。毕竟已经有半年多没有研
    究这些了,只能零碎的写一些心得了。使用CreateOleObject方式调用Word相比Service控件的最大缺点就是不支持代码的自动生成,
    但是我们充分的利用VBA代码就可以弥补这个功能。
    Word作为一个功能强大的Com,可以很容易被编程工具调用,成为办公自动化系统中处理文档
    的强有力的嵌套工具,尤其是充分Word本身的录制宏的功能,更进一步减轻了编程的负担。
    下面就如何在Delphi里面利用Word的VBA代码进行一些总结。
    1、 生成VBA代码。Word本身具有很强的可扩展性,尤其是支持用户自定义功能,其实现
    的主要方式就是通过VBA代码来实现的。在“工具->宏->Visual Basic编辑器”里面就可以看
    到具体的宏代码,可以直接进行编辑。而且还可以使用录制宏的功能自动生成宏代码。方法是
    选择“工具->宏->录制新宏”,然后执行自己想通过程序实现的功能,如存盘、打印等功能,
    此时Word一边执行你要实现功能,一边将你的操作生成了一个宏,在实现功能后,可以选择
    “工具->宏->VisualBasic编辑器”,查看生成的宏代码。例如:我们要将文档中的“讨论”全部替换成“研讨”。
    a. 点击“工具->宏->录制新宏”,直接点击确定,默认的宏保存到了Normal.dot系统公
    用模板里面。
    b. 点击“编辑->查找”,出现弹出对话框,输入查找和替换的字,点确定。进行替换。
    c. 结束宏的录制,点击结束按钮。
    d. 按F11或者“工具->宏->Visual Basic 编辑器”,查看宏代码。缺省查看Normal里面
    的模块里面的NewMacros模块。
    以下是生成的宏代码:
    Sub Macro1()
    '
    ' Macro1 Macro
    ' 宏在 2002-2-1 由 yzhshi 录制
    '
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        With Selection.Find
            .Text = "讨论"
            .Replacement.Text = "研讨"
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchByte = True
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute Replace:=wdReplaceAll
    End Sub
    2、 精简宏代码。通常,生成的宏代码有很多语句对你要实现的功能来说都是多余的。我们要
    做的就是如何找到我们需要的代码。此时我们查看具体的代码,剔除明显没有用途的代码,然后光
    标停留在宏上面,按F5执行,看是否实现功能,逐步精简,得到最小代码。此步骤可参考Word的
    VBA帮助来判断代码是否有用。如上例,精简下来,剩下以下代码。
    Sub Macro1()
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        With Selection.Find
            .Text = "讨论"
            .Replacement.Text = "研讨"
        End With
        Selection.Find.Execute Replace:=wdReplaceAll
    End Sub3、 转换成Delphi代码。这一步其实很简单,对于VBA代码,只需要在前面添加Word的句柄或者
    文档的句柄或者文档的句柄.Application就可以直接操作了。
    例:逐句翻译:(Word_Handle是Word的句柄)
    (VB)     Selection.Find.ClearFormatting
    (Delphi)  Word_Handle.Selection.Find.ClearFormatting;(VB)     Selection.Find.Replacement.ClearFormatting
    (Delphi)  Word_Handle.Selection.Find.Replacement.ClearFormatting;
    以上两句简单添加上Word的句柄就可以了。(VB)     With Selection.Find
                  Text = "讨论"
                  Replacement.Text = "研讨"
    End With
    (Delphi)  Word_Handle.Selection.Find.Text := '讨论';
      Word_Handle.Selection.Find.Replacement.Text := '研讨';
    以上几句因为Delphi不支持Variant的With结构,所以分开写。同时转换成Delphi语法。(VB)    Selection.Find.Execute Replace:=wdReplaceAll
    (Delphi) Word_Handle.Selection.Find.Execute(Replace:=2);
    上面一句存在一个小技巧,如何找到常量wdReplaceAll的数值为2?
    这里有几个办法,
    一:直接use Word2000或者word97单元,那么直接使用常量wdReplaceAll就可以了;
    二:到Word2000.pas或者Word97.pas里面查找wdReplaceAll的数值;
    三:直接使用VBA代码见wdReplaceAll的数值显示出来。办法是写一个小过程,然后执行,如下:
    Sub ShowValue()
      MsgBox wdReplaceAll
    End Sub最后补充一下,很多关于Word的东西可以从Word的VBA帮助里面获得。具体文件在
    ?:\Program files\Microsoft Office\Office10\2052(XP)下,VBAWD10.CHM,其他版本路径基本类似。
      

  4.   

    uses comobjvar
        word:variant;
    begin
        word:=createoleobject('word.application');
        word.visible:=true;
        word.documents.add();