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

概要

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

詳細情報

次の手順では、単純な Automation クライアントを構築する方法を示します。 この手順には、主に次の 3 つの手順があります。

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

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

Automation クライアントを作成する

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

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

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

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

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

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

    3. [Add a class from: Registry] をクリックし、Automation サーバーの登録済みタイプ ライブラリを見つけます。

      この例では、Microsoft ExcelXP の場合は [Microsoft Excel 10.0 タイプ ライブラリ] を、Microsoft Excel 2000 の場合は [Microsoft Excel 9.0 タイプ ライブラリ] を選択します。

    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. Automation サーバーのタイプ ライブラリ内のインターフェイスから生成されるヘッダー ファイルごとに include ディレクティブを追加します。 AutoProjectDlg.cpp の先頭にある 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);
   }
} 

Automation クライアントを実行する

F5 キーを押して Automation クライアントをビルドして実行します。 ダイアログ ボックスが表示されたら、[実行] をクリックします。 Automation クライアントは Excel を起動し、アプリケーションを表示します。 ユーザーにアプリケーションの制御が与えられているため、Automation クライアントが終了しても Excel は実行されたままであることに注意してください。

備考

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

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

|アプリケーション|タイプ ライブラリ| |---|---| |Microsoft Access 97|Msacc8.olb| |Microsoft Jet Database 3.5|DAO350.dll| |Microsoft Binder 97|Msbdr8.olb| |Microsoft Excel 97|Excel8.olb| |Microsoft Graph 97|Graph8.olb| |Microsoft Office 97|Mso97.dll| |Microsoft Outlook 97|Msoutl97.olb| |Microsoft PowerPoint 97|Msppt8.olb| |Microsoft Word 97|Msword8.olb| ||||Microsoft Access 2000|Msacc9.olb| |Microsoft Jet Database 3.51|DAO360.dll| |Microsoft Binder 2000|Msbdr9.olb| |Microsoft Excel 2000|Excel9.olb| |Microsoft Graph 2000|Graph9.olb| |Microsoft Office 2000|Mso9.dll| |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|Graph.exe| |Microsoft Office 2002|MSO.dll| |Microsoft Outlook 2002|MSOutl.olb| |Microsoft PowerPoint 2002|MSPpt.olb| |Microsoft Word 2002|MSWord.olb| ||||Microsoft Office Access 2003|Msacc.olb| |Microsoft Office Excel 2003|Excel.exe| |Microsoft Office Graph 2003|Graph.exe| |Microsoft Office 2003|MSO.dll| |Microsoft Office Outlook 2003|MSOutl.olb| |Microsoft Office PowerPoint 2003|MSPpt.olb| |Microsoft Office Word 2003|MSWord.olb| ||||Microsoft Office Access 2007|Msacc.olb| |Microsoft Office Excel 2007|Excel.exe| |Microsoft Office Graph 2007|Graph.exe| | 2007 Microsoft Office|MSO.dll| |Microsoft Office Outlook 2007|MSOutl.olb| |Microsoft Office PowerPoint 2007|MSPpt.olb| |Microsoft Office Word 2007|MSWord.olb|注: これらのタイプ ライブラリの既定の場所は次のとおりです。

|Office バージョン|パス| |---|---| |Office 97|C:\Program Files\Microsoft Office\Office| |Office 2000|C:\Program Files\Microsoft Office\Office| |Office XP|C:\Program Files\Microsoft Office\Office10| |Office 2003|C:\Program Files\Microsoft Office\Office11| |2007 Office|C:\Program Files\Microsoft Office\Office12|Dao350.dllとDao360.dllの既定の場所は C:\Program Files\Common Files\Microsoft Shared\Dao です。