我在参与一个人事档案管理的系统,其中有个模块要求把数据库里的内容导出到一个word文件中,我使用了如下的方法:
1、先建立一个word文件,格式搞好后,把需要用数据库相关内容的地方加了标记;
2、在delphi4(唉,没有办法,公司要用的)中使用CreateOleObject('Word.Application')来调用word,打开先建立好的word文件
3、用替换字符串的方法将word文件中的标记替换成数据库查询出来的内容出现的问题是:
1、有时出现“被呼叫方拒绝接收呼叫”,后重新安装office得以解决
2、有时出现:方法‘Disconnect'不为自动对象支持”,紧接着提示“RPC服务器无法使用”
3、有时出现:word打开后询问:上次打开文件失败,问是否恢复之类,然后出现:服务器出现意外情况这时时程中winword已经打开了,强行关闭后问题依然请各位指点一下,这里的关于delphi和word的文章看了很多,无法解决。解决以后,立即给分,在线等......

解决方案 »

  1.   

    只往excel中导过,升级吧
    3、word没完全退出
      

  2.   

    我也不会,
    实在不行的话,
    你可以下载fastreport控件
      

  3.   

    Delphi擅长做数据库类的MIS开发,但对于OA就有点力不从心了。不过随着Microsoft的COM技术逐渐成熟,现在普通Windows应用已经可以和Office 97无缝结合了,尤其是在Delphi 5中提供了一组Servers组件,更是简化了程序开发。 最近接触了一个用户的案例,用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类似的产品了。