Delphi Programming / Object Pascal
[掲載 2009年07月02日] [更新 2013年06月30日] Delphi サンプルプログラム集 |
432_TWordApplication によるワード操作の基本例 |
動作確認等 |
Windows 7 U64(SP1) + Delphi XE Pro + Word 2007 |
|
432_Word_TWordApp.zip [1,190 KB] 2013年06月30日版 (EXE 同梱) |
- 2013年06月30日
- Windows 7 U64(SP1) + Delphi XE Proで動作確認
|
01_TWordApplication によるワード操作の基本例 |
拙作のワード操作フォームExでは,この TWordApplication を使用しています.その動作の基本がここで紹介するサンプルコードです.
単にワードというアプリケーションを起動するだけであれば,本ページのようなコードは必要ありません.[485_アプリの起動とファイルを開く関数] の記事あるいは,その記事中のリンクを参考にしてください.
基本的な操作はエクセルの場合とほとんど同じです.エクセルの場合はブックを,ワードの場合は文書を開くことになります.このサンプルは単に「テスト文書」という文書を表示するだけです.文書を開くメソッドの引数は,使用する [Servers] タブのコンポーネントによって違いがあります.既に起動中のワードに接続する方法等はエクセルの操作コードを参考にしてください.
このサンプルコードとワード操作フォームEx のオブジェクトの対応は下表のようなっています.ワード操作フォームEx では,これらのオブジェクトを実行時に生成しています. |
このページのコード |
ワード操作フォームEx |
WordApplication1 (TWordApplication) |
wdfWordApp (TWordApplication) |
WordDocument1 (TWordDocument) |
wdfWordDoc (TWordDocument) |
|
図1
設計時画面
- [Servers] タブの以下を配置
TWordApplication
TWordDocument
|
|
図2
実行例 |
unit Word_TWordAppUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleServer, Word2000;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
WordApplication1: TWordApplication;
WordDocument1: TWordDocument;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//=============================================================================
// 操作しやすいように,このFormを最前面に表示
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
Self.FormStyle := fsStayOnTop;
end;
//=============================================================================
// FormのOnCloseイベント
// 終了処理(Delphi言語の例外で停止が無効でないとtry~end部分無効)
// Wordの切断
// try~except,endを使用しているのは,このフォームを閉じる前にワードを終了して
// してしまった場合を考慮して
//=============================================================================
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
try
if WordApplication1.Documents.Count > 0 then begin
WordDocument1.Close;
WordDocument1.Disconnect;
end;
//Quitがないと,WINWORD.EXEのプロセスがメモリ上に残ってしまう
WordApplication1.Quit;
WordApplication1.Disconnect;
except
end;
end;
//=============================================================================
// [ワードを新規起動]ボタン
// Wordアプリケーションの接続と指定文書の表示
// Openメソッドの引数の数はインストールしている[Servers]タブのOfficeのパッケ
// ージによって異なる.このコードはWord2000の場合.WordXPの場合は後3つ必要
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
FilePath : OleVariant;
begin
FilePath := ExtractFilePath(Application.ExeName) + 'テスト文書.doc';
WordApplication1.Connect;
WordApplication1.Visible := True;
//文書を開く
WordApplication1.Documents.Open(FilePath,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam);
//開いている文書に接続し,それをWordDocument1オブジェクトとする
WordDocument1.ConnectTo(WordApplication1.ActiveDocument as WordDocument);
end;
//=============================================================================
// [終了]ボタン
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;
//=============================================================================
// 現在表示中の文書のフルパス名を表示
// WordDocument1(TWordDocument)の使用例の1つとして
// ワード操作の他のコードは,拙作ワード操作フォームExのソースコードまたは
// オンライン・マニュアル参照
//=============================================================================
procedure TForm1.Button3Click(Sender: TObject);
var
ADocName : String;
begin
ADocName := WordDocument1.FullName;
Application.MessageBox(PChar(ADocName), '文書のパス名');
end;
end.
02_オブジェクトに OleVariant 型を使用するコード |
上のコードでは,Open メソッドの引数のほとんどにデフォルト値 (EmptyParam) を用いています.以下の様に,OleVariant 型を使用すると引数を省略できます. |
リスト2
Open メソッドに OleVartint を使用した例 |
//=============================================================================
// [ワードを新規起動]ボタン
// Wordアプリケーションの接続と指定文書の表示
//
// OleVariant型を使用すると引数を省略可能.ここではOpenメソッドで使用
// この方法だと,使用する[Servers]タブのバージョンに関係ないコードが使用可能
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
FilePath : OleVariant;
ADoc : OleVariant;
begin
FilePath := ExtractFilePath(Application.ExeName) + 'テスト文書.doc';
WordApplication1.Connect;
WordApplication1.Visible := True;
//文書を開く
ADoc := WordApplication1.Documents;
ADoc.Open(FileName := FilePath);
//開いている文書に接続し,それをWordDocument1オブジェクトとする
WordDocument1.ConnectTo(WordApplication1.ActiveDocument as WordDocument);
end;
02_[ ツールパレット ] 等に Servers がない場合 |
Delphi のバージョンによっては,初期状態では,TWordApplication や TExcelApplication 等のコンポーネントが使用できないことがあります.
この場合,下図のような [コンポーネントパレット] あるいは [ツールパレット] に [Servers] タブが存在しません. |
- 図3
- コンポーネントパレットの [Servers] タブ
|
|
|
図4
ツールパレットの [Servers]
|
このような場合は,[コンポーネント] [パッケージのインストール] で下図のダイアログを表示して, [Microsoft Office XXX オートメーション...] というパッケージをチェックします.
これらのパッケージは複数ある場合があります.使用可能なのは 1 つだけです.
Delphi XE2 以降には,Office2010 用のファイルも用意してありますが,パッケージとしては用意されていません.Delphi XE4 には,Offfice 2010 用のパッケージが用意されています.パッケージのインストールを実行すれば使用可能となります. |
|
図5
インストール済みパッケージ
- [コンポーネント] [パッケージのインストール] で表示されるダイアログ
- Microsoft Office XXX オートメーションのどちらかをチェックする
- 両方同時には使用できない
|
|