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 形式でも保存可能です.


リスト1
ワードの保存ダイアログを表示して保存
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;




上書き保存


上書き保存の機能を,別のボタンクリック等で実行するには,例えば次のようなコードで可能ず.


リスト3
上書き保存のコード
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) 形式で保存


指定のファイル形式で保存するには,保存の際にパラメータで指定します.次のコードはリッチテキスト形式 (RTF) で保存する例です.


図1
いろいろな保存形式の定数の一部 (Word 2007 の VBA のヘルプから)

リスト4
リッチテキスト (RTF) 形式で保存
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;




テキストだけを保存


文書内のテキストだけを保存する例です.

リスト5
テキストだけを保存
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 以降の docx 形式で保存


ワードの保存ダイアログを表示して,保存形式を選択して保存すれば,ワード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;




ワード 2007 以降の docm 形式で保存


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;