我需要把许多WORD文件存到数据库(或其他地方),然后提取出来修改,保存,然后在打印。在这个应用中,不需要显示WORD的全部菜单,但要有能实现表的编辑功能菜单,而且要求显示在应用程序框架里面,请问怎么可以实现,哪位能给我一些关于这方面的资料和代码,不胜感激!
   我用olecontainer试了一下,发现会有所有菜单,而且打开不同的文件切换起来很慢,并且打开的状态为不可编辑,如果右键点击编辑则出现变成WORD形式,而且不可返回。
   有什么好的方法能在WORD文件和数据库间进行快速存取

解决方案 »

  1.   

    打开过程是这样的:
    一,从数据库取出WORD文件,保存到指定一个文件夹下面,并给一个文件名称(*.doc)
    二,用OLE控件联接WORD文件并打开
    保存过程是这样的
    一,当WordApplication1的ONDocumentBeforeSave发生时,将当前打开的文件另保存为,然后反另保存为的这个WORD文件保存到数据库。
    具体做法是:下面是从数据取出并打开,这是我的原代码,你自己修改一下
    至于保存,代码太多了
    procedure tfrmConEdit.P_ShowModeText(iContractID:integer);
    var
      Filename,PasswordDocument,PasswordTemplate,WritePasswordDocument,
      WritePasswordTemplate,Encoding,ConfirmConversions,ReadOnly,
      AddToRecentFiles,Revert,Visible,Format,ItemIndex:olevariant;  strContractText:string;
      smContractText:TMemoryStream;
    begin
      if bbtnAdd.Caption ='&C.取消' then //当前为增加合同记录,因此不经过从数据库装载后再浏览
      begin
        if trim(edtPath.Text) <>'' then  //当路径为空是,不浏览,不为空则对当前路径的浏览
          strContractText:=edtPath.Text
        else
          exit;
      end else  //不是增加过程中的浏览 
      begin
        if adoqBaseInfo.RecordCount =0 then
          exit;
        strContractText:=ExtractFilePath(Application.ExeName)+'..\program\contract\合同文本.doc';
        smContractText:=TMemoryStream.Create();   //建立内存变量
        with dmSystem.adoqSys do
        begin
          if active then
            close;
          sql.clear;
          sql.add('select ContractID,ContractText from T_ContractText');
          sql.Add('where ContractID='+inttostr(iContractID)+'');
          open;
          if not eof then   //找到这条记录,将二进制字段内容付给变量smModeText
          begin
            TblobField(fields[1]).SaveToStream(smContractText);
            if smContractText.Size>0 then      //当二进制字段内容不为空
            begin
              smContractText.SaveToFile(strContractText);
            end else
            begin
              showmessage('数据装载不能功,不能浏览!');
              smContractText.Free;
              exit;
            end;
          end;
        end;
        smContractText.Free;
      end;  frmConEdit.Visible:=false;
      {联接WORD}
      wordapplication1.connect;
      wordapplication1.visible := true;
      wordapplication1.caption := '柳钢物资管理系统--合同管理模块';
      {打开一个指定的WORD文件}
      FileName := strContractText;//ExtractFilePath(Application.ExeName)+'..\program\contract\合同文本.doc';
      ConfirmConversions:= False;
      ReadOnly:=False;
      AddToRecentFiles:=False;
      PasswordDocument:='';
      PasswordTemplate:='';
      Revert:=True;
      WritePasswordDocument:='';
      WritePasswordTemplate:='' ;
      Format:=wdOpenFormatDocument;
      Visible := true;
      Encoding := '';
      WordApplication1.Documents.Open(FileName,ConfirmConversions,ReadOnly,
      AddToRecentFiles, PasswordDocument, PasswordTemplate,Revert,
      WritePasswordDocument, WritePasswordTemplate, Format, Encoding, Visible);
      ItemIndex:= 1;
      WordDocument1.ConnectTo(WordApplication1.Documents.Item(ItemIndex));
      WordApplication1.Options.CheckSpellingAsYouType := False;
      WordApplication1.Options.CheckGrammarAsYouType := False;
    end;
      

  2.   

    谢谢你,我还想知道怎么可以编辑,当然是在我的应用程序中编辑保存WORD,还有不知道速度如何?
    请教,如果有源代码,能给我看看
    [email protected]