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;