delphi中,如何打开一个word文档?用什么控件,如何调用,最好能给个例子。谢谢了,在线等待,试验成功立即全额给分。

解决方案 »

  1.   

    因此读OLE服务器嵌入数据时,要跳过文件头的TStreamHeader记录。下面就是如何分离OLE服务器嵌入数据的程序: varStream : TMemoryStream;FileStream : TFileStream;beginStream := TMemoryStream.Create;FileStream := TFileStream.Create('TEST.DOC', fmCreate) ;with OleContainer1 doif (State <> osEmpty) thenSaveToStream(Stream);Stream.Seek(Sizeof(TStreamHeader), 0);FileStream.CopyFrom(Stream, Stream.Size - SizeOf(TStreamHeader));Stream.Free;FileStream.Free;end; 
      

  2.   

    delphi6, servers面板上的控件,WordDocument1,WordFont1,WordDocument1procedure TForm1.SetFont;
    begin
     WordFont1.ConnectTo(WordDocument1.Sentences.Get_Last.Font);
     WordFont1.Underline := 2;//下划线
     WordFont1.Bold := 1;//黑体
    // WordFont1.Italic := 1;//斜体
    // WordFont1.Emboss := 1;//浮雕
     //WordFont1.Engrave := 1;//刻雕
     //WordFont1.Shadow := 1;//阴影
     //WordFont1.DoubleStrikeThrough := 1;//双删除线
     //WordFont1.StrikeThrough := 1;//删除线
     WordFont1.Size := 10;//字体大小
    end;procedure TForm1.Button3Click(Sender: TObject);
    //建立新的word文件
    var
     Template,NewTemplate,ItemIndex: OleVariant;
    begin
     Try
       Template := EmptyParam;
       NewTemplate := True;
       ItemIndex := 1;
       try
         WordApplication1.Connect;
       except
         MessageDlg('可能未安装Word!',mtInformation,[mbOk],0);
         Abort;
       end;
       WordApplication1.Visible := true;  //是否显示word
       WordApplication1.Caption := 'Delphi';   Template := EmptyParam;
       NewTemplate := False;
       WordApplication1.Documents.Addold(Template,NewTemplate);
       WordDocument1.ConnectTo(WordApplication1.Documents.Item(ItemIndex));   //关闭拼写检查和语法检查
       WordApplication1.Options.CheckSpellingAsYouType := False;
       WordApplication1.Options.CheckGrammarAsYouType := False;
        
       SetFont;
       //添加内容 
       WordDocument1.Range.InsertAfter('标题'+ #13);
       WordDocument1.Range.InsertAfter('正文测试,正文测试,正文测试,正文测试,' + #13);
       WordDocument1.Range.InsertAfter('正文测试,正文测试,正文测试,' + #13);
       WordDocument1.Range.InsertAfter(' 正文测试,正文测试,正文测试,' + #13);
       WordDocument1.Range.InsertAfter(' 正文测试,正文测试,正文测试,' + #13);
       WordDocument1.Range.InsertAfter('asdfasfsdf');
     Except
       on E: Exception do
       begin
        ShowMessage(E.Message);
        WordApplication1.Disconnect;
       end; 
     end;end;procedure TForm1.Button4Click(Sender: TObject);
    var        //存盘
     SaveChanges,OriginalFormat,RouteDocument: OleVariant;
     SavePath: OleVariant;
    begin
     SaveChanges := WdDoNotSaveChanges;
     OriginalFormat := UnAssigned;
     RouteDocument := UnAssigned;
     try
      SavePath := 'd:\samp.doc';
      WordDocument1.SaveAs(SavePath);
      WordDocument1.Close;
      WordDocument1.Disconnect;
      WordApplication1.Quit(SaveChanges,OriginalFormat,RouteDocument);
      WordApplication1.Disconnect;
     except
      On E: Exception do
      begin
       ShowMessage(E.Message);
       WordApplication1.Disconnect;
      end;
     end;
    end;
      

  3.   

    aiirii(ari-爱的眼睛),我编译你的那段代码,怎么编译出错:
    [Error] Unit1.pas(39): Undeclared identifier: 'TStreamHeader'
      

  4.   

    //显示在OleContainer控件中
    procedure TForm1.N3Click(Sender: TObject);
    begin
      if OpenDialog1.Execute then
      begin
        OleContainer1.CreateObjectFromFile(OpenDialog1.FileName,False);
        OleContainer1.DoVerb(0);
      end;
    end;如果要跟数据库连接起来,我还可以提供资料!
      

  5.   

    谢谢各位。谢谢cherrylin(伊雪),很想请教类似office文档和数据库打交道的一些实现方法。我想将word或excel文档中的某一个数字和图像保存到数据库中,以便于以后查询用。不知道有没有什么方法能够实现。我把这个作为一个问题,期望你帮我解决。
      

  6.   

    嘿嘿:)这个我可能不太会了,我前次试了是将WORD等文档保存到数据库中的,像你这样的抽出几个数据字和图像我没试过,所以也不太清楚!因为我自己也很菜的,呵呵:)//加载文档到数据库
    procedure TForm1.Button1Click(Sender: TObject);
    var
      BS:TADOBlobStream;
    begin
      if OpenDialog1.Execute then
      begin
        DataModule2.ADOQuery1.Active:=True;
        DataModule2.ADOQuery1.Append;
        BS:=TADOBlobStream.Create(DataModule2.ADOQuery1wtext,bmWrite);
        BS.LoadFromFile(OpenDialog1.FileName);
        BS.Position:=0;
      try
        try
          DataModule2.ADOQuery1.FieldByName('wname').Value:=ExtractFileName(OpenDialog1.FileName);
          DataModule2.ADOQuery1wtext.LoadFromStream(BS);
          DataModule2.ADOQuery1extension.Value:=ExtractFileExt(OpenDialog1.FileName);
        finally
          BS.Free;
          DataModule2.ADOQuery1.Post;
          DataModule2.ADOQuery1.Active:=False;
          showmessage('文件保存成功!');
          end;
      except
        showmessage('文件保存失败!');
      end;
      end;  
    end;//显示
    procedure TForm3.Button2Click(Sender: TObject);
    var
      BS1:TADOBlobStream;
      sFileName:string;
    begin
      DataModule2.ADOQuery1.Active:=True;
      BS1:=TADOBlobStream.Create(TBlobField(DataModule2.ADOQuery1.FieldByName('wtext')),bmRead);
      try
        sFileName:=ExtractFilePath(Application.ExeName);
        sFileName:=sFileName+TStringField(DataModule2.ADOQuery1.FieldByName('wname')).AsString;
        BS1.SaveToFile(sFileName);
        OleContainer1.CreateObjectFromFile(sFileName,False);
        OleContainer1.DoVerb(0);
      finally
        BS1.Free;
        DeleteFile(sFileName);
      end;
    end;//保存OleContainer中修改后的文档到数据
    procedure TForm3.N2Click(Sender: TObject);
    var
      BS2:TADOBlobStream;
      sFileName1:string;
    begin
      sFileName1:=ExtractFilePath(Application.ExeName);
      sFileName1:=sFileName1+'Blob'+TStringField(DataModule2.ADOQuery1.FieldByName('wname')).AsString;
      Olecontainer1.SaveAsDocument(sFileName1); 
      DataModule2.ADOQuery1.Active:=True;
      DataModule2.ADOQuery1.Edit;
      BS2:=TADOBlobStream.Create(TBlobField(DataModule2.ADOQuery1.FieldByName('wtext')),bmWrite);
      BS2.LoadFromFile(sFileName1);
      BS2.Position:=0;
      try
        try
          DataModule2.ADOQuery1.UpdateRecord;
          TBlobField(DataModule2.ADOQuery1.FieldByName('wtext')).LoadFromStream(BS2);
        finally
          BS2.Free;
        end;
        DataModule2.ADOQuery1.Post;
        DeleteFile(sFileName1);
        showmessage('保存成功!');
      except
        showmessage('保存失败!');
      end;
    end;不好意思,没帮到你,希望上面的例子能给你一些起发吧!