Delphi Programming / Object Pascal

[掲載 2010年03月03日] [更新 2013年12月02日] ワード操作フォームEx |
ワード操作フォームEx 参考コード類
文書の保存・形式を指定した保存等 |
| 動作確認等 |
Windows 7 U64(SP1) + Delphi XE Pro + Word 2010 |
ワードの保存ダイアログを使用すると、いろいろな形式で保存できます。
Word 2007 以降の文書形式である docx, docm 形式でも保存可能です。 |
procedure TplWordFormEx2.Button1Click(Sender: TObject);
begin
wdfWordApp.Dialogs.Item(wdDialogFileSaveAs).Show(EmptyParam);
wdfSetFocusWord;
end;
| [ 保存 ] ボタンでワードの保存ダイアログを表示 |
| [保存] ボタンでワードの保存ダイアログを表示して保存する場合は、継承フォームのボタンクリックにそのコードを記述します。この時、元のダイアログを表示しないようにします。常にワードの保存ダイアログを使用するのであれば、元のワード操作フォームEx のコードを書きえてください。 |
リスト2
[ 保存 ] ボタンでワードの保存ダイアログを表示 |
procedure TplWordFormEx2.btnFileOpenClick(Sender: TObject);
begin
//inheritedをコメントアウトする
//inherited;
wdfWordApp.Dialogs.Item(wdDialogFileSaveAs).Show(EmptyParam);
wdfSetFocusWord;
end;
| 上書き保存の機能を、別のボタンクリック等で実行するには、例えば次のようなコードで可能ず。 |
procedure TplWordFormEx2.Button2Click(Sender: TObject);
var
pType : OleVariant;
pID : OleVariant;
begin
pType := msoControlButton;
pID := 3;
try
wdfWordApp.CommandBars.FindControl(pType, pID, EmptyParam, EmptyParam).Execute;
except
end;
wdfSetFocusWord;
end;
| [上書き] ボタンの機能をカスタマイズしたい場合も同様に、上のコード、あるいは、本ページのこれ以降のコードを参考にして書き換えることにより可能です。 |
| 指定のファイル形式で保存するには、保存の際にパラメータで指定します。次のコードはリッチテキスト形式 (RTF) で保存する例です。 |
図1
いろいろな保存形式の定数の一部 (Word 2007 の VBA のヘルプから) |
procedure TplWordFormEx2.Button3Click(Sender: TObject);
var
pFilePath : OleVariant;
pFileFormat : OleVariant;
objWordDoc : OleVariant;
begin
wdfWordApp.ScreenUpdating := False;
//保存ファイル名のフルパス
pFilePath := ChangeFileExt(wdfFileFullPath, '.rtf');
//保存形式
pFileFormat := wdFormatRTF;
//文書のオブジェクトをOleVariantに変更
objWordDoc := wdfWordApp.ActiveDocument;
try
//保存ファイル名以外はデフォルトの設定で保存
objWordDoc.SaveAs(pFilePath, pFileFormat);
wdfWordDoc.Saved := True;
wdfFileFullPath := objWordDoc.FullName;
Self.Caption := ChangeFileExt(objWordDoc.Name, '');
except
end;
wdfWordApp.ScreenUpdating := True;
end;
procedure TplWordFormEx2.Button4Click(Sender: TObject);
var
pFilePath : OleVariant;
pFileFormat : OleVariant;
objWordDoc : OleVariant;
begin
wdfWordApp.ScreenUpdating := False;
//保存ファイル名のフルパス
pFilePath := ChangeFileExt(wdfFileFullPath, '.txt');
//保存形式
pFileFormat := wdFormatDOSTextLineBreaks;
//文書のオブジェクトをOleVariantに変更
objWordDoc := wdfWordApp.ActiveDocument;
try
//保存ファイル名以外はデフォルトの設定で保存
objWordDoc.SaveAs(pFilePath, pFileFormat);
wdfWordDoc.Saved := True;
wdfFileFullPath := objWordDoc.FullName;
Self.Caption := ChangeFileExt(objWordDoc.Name, '');
except
end;
wdfWordApp.ScreenUpdating := True;
end;
ワードの保存ダイアログを表示して、保存形式を選択して保存すれば、ワード2007以降の文書形式で保存することができます。しかし、上の保存形式を指定した保存のコードだけでは Word 2007 以降の文書形式として保存できません。
Word 2007 以降の文書形式で保存するには、convert メソッドで、新しい形式に変換します。ワード操作フォームEx は、Word 2000 の機能を使用しているため、このメソッドが使えません。そこで次のコードでは、文書のオブジェクトを OleVariant 型に変換してから convert メソッドを実行し、保存コードを実行するようにしています。
システムのカレントバージョンが、Word 2007 以上になっていないとコンバートは失敗します。 |
リスト6
Word 2007 以降の docx 形式保存 (マクロは保存しない) |
procedure TplWordFormEx2.Button5Click(Sender: TObject);
var
pFilePath : OleVariant;
pFileFormat : OleVariant;
objWordDoc : OleVariant;
begin
wdfWordApp.ScreenUpdating := False;
//保存ファイル名のフルパス
pFilePath := ChangeFileExt(wdfFileFullPath, '.docx');
//保存形式
pFileFormat := wdFormatDocument;
//文書のオブジェクトをOleVariantに変更
objWordDoc := wdfWordApp.ActiveDocument;
if wdfWordVersionNo >= 12 then begin
try
//新しいドキュメント形式に変換
//既にコンバートしている場合はエラーとなる
try
objWordDoc.Convert;
except
end;
//保存ファイル名以外はデフォルトの設定で保存
objWordDoc.SaveAs(pFilePath);
wdfWordDoc.Saved := True;
wdfFileFullPath := objWordDoc.FullName;
Self.Caption := ChangeFileExt(objWordDoc.Name, '');
except
end;
end;
wdfWordApp.ScreenUpdating := True;
end;
Word 2007 以降では、マクロも保存可能な文書と、できない文書は拡張子が異なります。docx はマクロが保存できないファイル形式です。
マクロも保存するには、convert メソッドを実行した後、wdFormatXMLDocumentMacroEnabled を保存形式に指定して、拡張子を docm とします。その例です。
システムのカレントバージョンが、Word 2007 以上になっていないとコンバートは失敗します。 |
リスト7
Word 2007 以降の docm 形式保存 (マクロも保存する) |
procedure TplWordFormEx2.Button6Click(Sender: TObject);
const
wdFormatXMLDocumentMacroEnabled = 13;
var
pFilePath : OleVariant;
pFileFormat : OleVariant;
objWordDoc : OleVariant;
begin
wdfWordApp.ScreenUpdating := False;
//保存ファイル名のフルパス
pFilePath := ChangeFileExt(wdfFileFullPath, '.docm');
//保存形式
pFileFormat := wdFormatXMLDocumentMacroEnabled;
//文書のオブジェクトをOleVariantに変更
objWordDoc := wdfWordApp.ActiveDocument;
if wdfWordVersionNo >= 12 then begin
try
//新しいドキュメント形式に変換
//既にコンバートしている場合はエラーとなる
try
objWordDoc.Convert;
except
end;
//保存ファイル名以外はデフォルトの設定で保存
objWordDoc.SaveAs(pFilePath, pFileFormat);
wdfWordDoc.Saved := True;
wdfFileFullPath := objWordDoc.FullName;
Self.Caption := ChangeFileExt(objWordDoc.Name, '');
except
end;
end;
wdfWordApp.ScreenUpdating := True;
end;
|