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;
|