Delphi中如何通过TWordApplication获取Word文件的分页信息?

解决方案 »

  1.   

    没用过,我的感觉是不是该用TWordDocument
      

  2.   

    是用TWordDocument,不过TWordDocument好像只看到取段落信息的,没看到有取分页信息的资料
      

  3.   

    让DELPHI与OFFICE联姻 
      由于微软的Office系列的完善的功能;与Windows和IE的紧密集成以及强大的扩展能力,它实际上已经成为事实上的Windows下办公软件的标准,我们知道在VB中可以建立各种Office对象(Word、Excel)并控制这些对象编辑、打印、保存文档以及控制执行Office中的很多操作。象这样在VB中建立并控制Office对象是十分有用的,例如你可以将一个或者一批数据库自动输入到Word或者Excel中并保存,再通过Outlook将文档分发给其它同仁。
      过去,这只有通过VB才能实现的,但是现在Delphi5也提供了这样强大的对象组。利用Delphi也可以利用Office资源了。
      打开Delphi,滚动Compent Palette到Servers页,就可以看到很多熟悉的控件图标,这些就是Office组件的控件。Delphi 5中对应Office的组件包括了Word、Excel、Access、PowerPoint和Outlook可以说是十分的全面。不过要使用这些组件首先要保证你的系统中安装了Office 97或以上的 版本。
      下面首先来说以下Office组件的基本使用方法Delphi中对于Office中不同的组件,首先要建立一个Application对象,例如要控制Word,首先要建立TWordApplication对象,然后再将诸如TWordDocument等Word对象通过ConnectTo方法连接到TWordApplication对象上。对于其它的Excel、Outlook等也是如此。
      下面我通过具体的范例来说明对Delphi中Office对象的控制,即如何将文字输出到Word中进行简单的排版并保存和打印输出。
      首先建立一个新的工程,在Form1中加入三个TButton对象、一个TMemo对象、一个TWordApplication对象、一个TWordDocument对象、一个TWordFont对象。下面是Form1的代码:
      unit Unit1;
      interface
      uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ExtCtrls, Word97, OleServer,Clipbrd;
      type
      TForm1 = class(TForm)
      Memo1: TMemo;
      Button1: TButton;
      WordApplication1: TWordApplication;
      WordDocument1: TWordDocument;
      WordFont1: TWordFont;
      Button2: TButton;
      Button3: TButton;
      procedure FormCreate(Sender: TObject);
      procedure Button1Click(Sender: TObject);
      procedure Button2Click(Sender: TObject);
      procedure Button3Click(Sender: TObject);
      private
      { Private declarations }
      public
      { Public declarations }
      end;
      var
      Form1: TForm1;
      implementation
      {$R *.DFM}
      procedure TForm1.FormCreate(Sender: TObject);
      begin
      Button1.Caption := '插入到Word';
      Button2.Caption := '打印';
      Button3.Caption := '退出';
      Button2.Enabled :=False;
      Button3.Enabled :=False;
      end;
      procedure TForm1.Button1Click(Sender: TObject);
      var
      Template,NewTemplate,ItemIndex:OleVariant;
      procedure setfont;
      begin
      WordFont1.ConnectTo(WordDocument1.Sentences.Get_Last.Font);
      WordFont1.Bold := 1;
      WordFont1.Italic := 1;
      WordFont1.shadow := 1;
      WordFont1.Size := 12;
      end;
      begin
      try
      Template := EmptyParam;
      NewTemplate := True;
      ItemIndex := 1;
      try
      Wordapplication1.Connect;
      except
      MessageDlg('无法连接,也许没有安装Word', mtError, [mbOk], 0);
      Abort;
      end;
      Wordapplication1.Visible := False;
      WordApplication1.Caption := 'Delphi Word';
      //建立一个新文档
      Template := EmptyParam;
      NewTemplate := False;
      WordApplication1.Documents.Add(Template, NewTemplate);
      //建立WordDocument连接
      WordDocument1.ConnectTo(WordApplication1.Documents.Item(ItemIndex));
      //因为Word进行拼写检查需要很多时间,所以首先关闭检查
      WordApplication1.Options.CheckSpellingAsYouType := False;
      WordApplication1.Options.CheckGrammarAsYouType := False;
      //将Memo1的内容拷贝到Word中
      SetFont;
      WordDocument1.Range.InsertAfter('Memo1的文本: ' + #13+Memo1.Text + #13);
      Button2.Enabled :=True;
      Button3.Enabled :=True;
      Button1.Enabled :=False;
      except
      on E: Exception do
      begin
      ShowMessage(E.Message);
      WordApplication1.Disconnect;
      end;
      end;
      end;
      procedure TForm1.Button2Click(Sender: TObject);
      begin
      WordDocument1.PrintOut;
      end;
      procedure TForm1.Button3Click(Sender: TObject);
      var
      SaveChanges,OriginalFormat,RouteDocument,SavePath: OleVariant;
      begin
      SaveChanges := WdDoNotSaveChanges;
      OriginalFormat := UnAssigned;
      RouteDocument := UnAssigned;
      try
      SavePath:='c:\samp.doc';
      WordDocument1.SaveAs(SavePath);
      WordDocument1.Close;
      WordDocument1.Disconnect;
      WordApplication1.Quit(SaveChanges, OriginalFormat, RouteDocument);
      WordApplication1.Disconnect;
      close;
      except
      on E: Exception do
      begin
      Showmessage(E.Message);
      WordApplication1.Disconnect;
      end;
      end;
      end;
      end.
      运行程序,在Memo1中输入一些文字,点击“插入到Word”按钮,然后点击“打印”按钮就可以将由Memo1输入到Word中的文本打印出来。点击“退出”按钮就可以将文档保存到 c:\samp.doc 中然后关闭与Word的连接并退出。
      由上面的范例可以看到,Delphi对于Office组件的编程同VB是有一些相似的,由于不知道什么原因,Delphi并没有提供Office组件的帮助文档。上面的程序我是一点点摸索出来的,但是如果你掌握了Office组件的编程技巧,加上Delphi强大的功能,一定会使你的程序如虎添翼的。