使用CreateOleObject方法對Word文檔操作具有先天所具備的優勢,與Delphi所提供的那些控件方式的訪問相比,CreateOleObject方法距離Word核心的操作“更近”,因為它直接使用Office所提供的VBA語言對Word文檔的操作進行編程。
以下是我在本機上所做的實驗,機器軟件配置如下:
Windows XP+Delphi7.0+Office 2003
這個程序很簡單,在頁面上放置了一個edit和一個button,每單擊一次按鈕,就會自動把edit中的內容添加在後台中的Word文檔中,程序關閉時文件自動保存在當前程序的主目錄中。
unit main;
interface
//如果要使用CreateOleObject的辦法對Word文檔進行操作,應該在uses
//語句中加入Comobj聲明和WordXP聲明
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Comobj, WordXP, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
// procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
//把這兩個變量聲明為全局變量
FWord: Variant;
FDoc: Variant;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
FWord.Selection.TypeParagraph;
FWord.Selection.TypeText(Text := form1.Edit1.Text);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
//首先創建對象,如果出現異常就作出提示
try
FWord := CreateOleObject('Word.Application');
//Word程序的執行是否可見,值為False時程序在後台執行
FWord.Visible := False;
except
ShowMessage('創建Word對象失敗!');
Exit;
end;
//先在打開的Word中創建一個新的頁面,然後在其中鍵入"Hello,"+回車+"World!"
try
FDoc := FWord.Documents.Add;
FWord.Selection.TypeText(Text := 'Hello,');
FWord.Selection.TypeParagraph;
FWord.Selection.TypeText(Text := 'World! ');
except
on e: Exception do
ShowMessage(e.Message);
end;
end;
//在程序關閉時把文件內容保存到當前目錄中,並以test.doc命名
//同時關閉Word程序
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FDoc.SaveAs(ExtractFilePath(application.ExeName) +'test.doc');
FWord.Quit;
FWord := Unassigned;
end;
end.
此外,對Office其他文件的操作都比較類似,不在贅述。通過對Word文件中更復雜的VBA宏的引用,這個方法還可以完成更復雜的文檔操作。