Visual C++ .NET から Office Automation 用のタイプライブラリを使用する方法

概要

この記事では、コンポーネントオブジェクトモデル (COM) に準拠しているアプリケーションのオートメーションクライアントとして動作する Visual C++ .NET プロジェクトを構築する方法について説明します。 この記事のサンプルでは、Microsoft Foundation Classes (MFC) と Office コンポーネントのクラスラッパーを使用しています。

詳細

次の手順は、簡単なオートメーションクライアントを構築する方法を示しています。 この手順には、次の3つの主要な手順があります。

  1. オートメーションクライアントを作成します。
  2. Microsoft Excel を自動化するコードを追加します。
  3. オートメーションクライアントを実行します。

最初の手順 (オートメーションクライアントの作成) を使用して、使用しているオートメーションサーバーに関係なく、新しいオートメーションクライアントを作成できます。 2番目の手順 (Microsoft Excel を自動化するコードを追加します) は、オートメーションサーバーに固有です。

オートメーションクライアントを作成する

  1. Microsoft Visual Studio .NET を起動します。 [ファイル] メニューの [新規作成] をクリックし、[プロジェクト] をクリックします。 [Visual C++ プロジェクトの種類] で [MFC アプリケーション] を選択し、プロジェクトに AutoProject という名前を付けます。

  2. MFC アプリケーションウィザードが表示されたら、[アプリケーションの種類] をクリックし、アプリケーションの種類を [ダイアログベース] に設定して、[完了] をクリックします。

  3. [IDD_AUTOPROJECT_DIALOG] ダイアログボックスを次のように変更します。

    1. ラベルコントロール (IDC_STATIC) と [キャンセル] ボタン (IDCANCEL) を削除します。
    2. OKbutton の ID を "IDRUN" に、キャプションを "実行" に変更します。
  4. オートメーションサーバーのタイプライブラリからクラスラッパーを次のように作成します。

    1. ソリューションエクスプローラーで、[AutoProject] を右クリックし、[クラスの追加] をクリックします。

    2. [Typelib からの MFC クラス] をクリックし、[開く] をクリックします。

    3. [クラスの追加元: レジストリ] をクリックし、オートメーションサーバーの登録済みタイプライブラリを探します。

      この例では、microsoft ExcelXP の場合は "Microsoft Excel 10.0 Type Library"、Microsoft Excel 2000 の場合は "Microsoft Excel 9.0 Type Library" を選択します。

    4. 一覧から必要なインターフェイスを選択し、[より大きい] 記号 (>) をクリックして、MFC がラッパーを作成するインターフェイスの一覧に追加します。 すべてのインターフェイスを追加したら、[完了] をクリックします。

      この例では、_Application インターフェイスのみが必要です。

      重要選択したタイプライブラリに多くのインターフェイスがある場合は、選択したインターフェイスごとに MFC が別のヘッダーファイルを生成するため、使用するインターフェイスのみを選択します。 インターフェイスの選択を最小限にすることで、ファイルの生成とコンパイル時に不要なオーバーヘッドを回避できます。

  5. COM サービスライブラリを読み込んで、CAutoProjectApp:: InitInstance 関数に対して有効にするには、次のコードを追加します。

    if(!AfxOleInit())  // Your addition starts here.
    {
      AfxMessageBox("Cannot initialize COM dll");
      return FALSE;
      // End of your addition.
    }
    
    AfxEnableControlContainer();
    
    
  6. オートメーションサーバーのタイプライブラリのインターフェイスから生成されるヘッダーファイルごとに、include ディレクティブを追加します。 AutoProjectDlg の先頭にある Stdafx.h の include ステートメントの後に、ディレクティブを追加します。

    この例では、_Application インターフェイス用に生成された CApplication .h ヘッダーファイルのインクルードを追加します。

          #include "stdafx.h"
          #include "CApplication.h"
    
    

Microsoft Excel を自動化するコードを追加する

[IDD_AUTOPROJECT_DIALOG] ダイアログボックスで、[実行] を右クリックし、ドロップダウンリストボックスから [イベントハンドラーの追加] をクリックします。 イベントハンドラーウィザードで、メッセージの種類 BN_CLICKED を選択し、[追加と編集] をクリックします。 次のコードを追加して、ハンドラー内の Excel を自動化します。

void CAutoProjectDlg::OnBnClickedRun()
{
   CApplication app;  // app is the Excel _Application object

// Start Excel and get Application object.

if(!app.CreateDispatch("Excel.Application"))
   {
      AfxMessageBox("Cannot start Excel and get Application object.");
      return;
   }
   else
   {
      //Make the application visible and give the user control of
      //Microsoft Excel.
      app.put_Visible(TRUE);
      app.put_UserControl(TRUE);
   }
} 

オートメーションクライアントを実行する

F5 キーを押して、オートメーションクライアントをビルドして実行します。 ダイアログボックスが表示されたら、[実行] をクリックします。 オートメーションクライアントが Excel を起動し、アプリケーションが表示されるようになります。 ユーザーにアプリケーションの制御が与えられているため、オートメーションクライアントが終了しても、Excel は実行を続けます。

備考

タイプライブラリからプロジェクトにクラスを追加すると、プロジェクトのクラスビューに表示されることがわかります。 クラスビューでクラスをダブルクリックすると、そのクラスのメソッドが表示され、メソッドをダブルクリックすると、その関数の定義が MFC ラッパーの実装ファイルに表示されます。 戻り値の型を検証する場合、または関数の実装を変更する必要がある場合は、メンバー関数の定義を確認できます。

前述の手順では、Microsoft Excel を自動化する方法について説明していますが、他のアプリケーションを自動化するための同じアイデアを適用することができます。 次の一覧には、他の Microsoft Office アプリケーションのタイプライブラリのファイル名が含まれています。

|アプリケーション|タイプライブラリ| |---|---| |Microsoft Access 97|Msacc8 .olb| |Microsoft Jet データベース3.5|DAO350| |Microsoft バインダー97|Msbdr8 .olb| |Microsoft Excel 97|Excel8 .olb| |Microsoft Graph 97|Graph8 .olb| |Microsoft Office 97|Mso97| |Microsoft Outlook 97|Msoutl97 .olb| |Microsoft PowerPoint 97|Msppt8 .olb| | Microsoft Word 97|Msword8 .olb| ||| |Microsoft Access 2000|Msacc9 .olb| |Microsoft Jet データベース3.51|DAO360| |Microsoft バインダー2000|Msbdr9 .olb| | Microsoft Excel 2000|Excel9 .olb| |Microsoft Graph 2000|Graph9 .olb| |Microsoft Office 2000|Mso9| |Microsoft Outlook 2000|Msoutl9 .olb| |Microsoft PowerPoint 2000|Msppt9 .olb| |Microsoft Word 2000|Msword9 .olb | ||| | Microsoft Access 2002|Msacc .olb| |Microsoft Excel 2002|Excel.exe| |Microsoft Graph 2002|Excel.exe| |Microsoft Office 2002|MSO.DLL| |Microsoft Outlook 2002|MSOutl| |Microsoft PowerPoint 2002|MSPpt| |Microsoft Word 2002|MSWord .olb| ||| |Microsoft Office Access 2003|Msacc .olb| |Microsoft Office Excel 2003|Excel.exe| |Microsoft Office Graph 2003|Excel.exe| |Microsoft Office 2003|MSO.DLL| |Microsoft Office Outlook 2003|MSOutl| | Microsoft Office PowerPoint 2003|MSPpt| | Microsoft Office Word 2003|MSWord .olb| ||| |Microsoft Office Access 2007|Msacc .olb| |Microsoft Office Excel 2007|Excel.exe| |Microsoft Office Graph 2007|Excel.exe| | 2007 Microsoft Office|MSO.DLL| |Microsoft Office Outlook 2007|MSOutl| | Microsoft Office PowerPoint 2007|MSPpt| | Microsoft Office Word 2007|MSWord .olb| メモこれらのタイプライブラリの既定の場所は次のとおりです。

|Office のバージョン|Path| |---|---| |Office 97|C:\Program C:\Program Office\Office| |Office 2000|C:\Program C:\Program Office\Office| |Office XP|C:\Program C:\Program Office\Office10| |Office 2003|C:\Program C:\Program Office\Office11| |2007 Office|C:\Program C:\Program Office\Office12| Dao350 および Dao360 の既定の場所は C:\Program Files\Common の Shared\Dao.