Excel での C API を使用したプログラミング

適用対象: Excel 2013 | Office 2013 | Visual Studio

XLL ソフトウェア開発キットと C API Microsoft Excel 2013を使用して、Excel 2013 の高性能ワークシート関数を作成できます。 Excel 2013 C API へのアップグレードには、サード パーティまたは社内機能のパフォーマンスが重要なユーザーに対する継続的なサポートが反映されています。

Excel のプログラミング インターフェイス

Excel には、インターフェイスを使用して Excel と接続するアプリケーションを開発するためのいくつかのオプションが用意されています。 Excel のプログラミング インターフェイスは、次の順序で以前のバージョンに追加されました。

  • XLM マクロ言語: Excel の拡張機能と C API の基礎の最初のユーザーがアクセス可能な言語。 Excel 2010 では引き続きサポートされていますが、XLM は長い間、Visual Basic for Applications (VBA) に置き換えられてきた。

  • C API と XLL: Excel と統合された DLL。 これらの DLL は、パフォーマンスの高いワークシート関数を追加するための最も直接的で最速のインターフェイスを提供しますが、後のテクノロジと比較して複雑さを伴います。

  • Vba: Excel ブック オブジェクトに関連付けられている Visual Basic コード オブジェクト。 VBA は、イベント トラップ、カスタマイズ、ユーザー定義関数とコマンドの追加を可能にしています。 VBA は、最も一般的に使用され、最も容易に利用できる拡張オプションです。

  • Com: Windows ベースのアプリケーションの相互運用性標準。この標準では、Excel によってイベントとオブジェクトが公開されます。 VBA では、COM を使用して Excel と対話します。 Excel は、Excel を外部で制御できる C++ COM コード リソースとアプリケーションを作成するのに役立つ COM タイプ ライブラリをエクスポートします。

  • Microsoft .NET Framework: 分散環境向けの迅速なアプリケーション開発用に設計された多言語マネージド コード環境。 .NET Frameworkに基づくコードの主なプログラミング言語は C# ですが、多くの言語は Microsoft 中間言語 (MSIL) にコンパイルできます。 Excel 2013 は、.NET Framework アセンブリに含まれるコード リソースにアクセスできます。

C API を使用する場合

XLL を記述し、C API を使用する主な理由は、高パフォーマンスなワークシート関数を作成するためです。 XLL 関数は、よく "ユーザー定義" 関数と呼ばれますが、ほとんどのユーザーにとって XLL は時間をかけて記述に必要な理解とスキルを得る必要があるため、実用的とはいえない技術になっています。 それにもかかわらず、高パフォーマンスの関数のアプリケーション (Excel 2013 では強力なサーバー リソースに対するマルチ スレッドのインターフェイスを記述する機能) を考えると、XLL は Excel の機能拡張の非常に重要な部分です。

Excel 2007 で導入された C API の改訂は、ユーザー インターフェイスなどの機能ではなく、主に高性能な計算に関連する側面に関係しています。

高パフォーマンスのユーザー定義ワークシート関数の作成

Excel C API は、XLL アドインを作成してパフォーマンスの高いワークシート関数を作成する場合に最適です。C API を使用すると、ワークシート データに最も直接アクセスできます。 XLL を使用すると、Excel が DLL リソースへ最も直接的にアクセスできるようになります。 Excel 2013 では、新しいデータ型が追加され、最も重要なのは、クラスター化されたサーバーでユーザー定義関数を実行するためのサポートによって、XLL のパフォーマンスがさらに強化されます。

XLL の操作にはコストがかかります。C API には、VBA、COM、または.NET Frameworkのより高いレベルの迅速な開発機能はありません。 メモリ管理は低レベルであるため、開発者に大きな責任を負います。 COM を介して公開され、VBA と.NET Frameworkを介して使用できる多くの Excel 機能は、C API には公開されません。

XLL ワークシート関数を使用したマルチスレッド サーバーへのアクセス

Multithreaded recalculation (MTR), which was introduced in Excel 2007, enables you to create thread-safe XLL worksheet functions. You can use these functions to access multithreaded servers. Later sections describe more fully how this can dramatically increase the performance observed by the user. 処理能力を大量に消費する必要がある Excel ユーザーに対して、MTR を使用する XLL と強力な計算サーバーの組み合わせは、最高のパフォーマンス ソリューションを提供します。

Excel ユーザー インターフェイスのカスタマイズ

Excel の多くのバージョンでは、C API はユーザー インターフェイスをカスタマイズする際に、最適な選択肢ではありませんでした。 VBA は、Excel のオブジェクトとイベントへのアクセスに優れています。 Excel 2007 で導入されたユーザー インターフェイスは、外観と基本技術の両面で、以前のバージョンとは大きく異なります。 マネージ コードのリソースを使用して、このインターフェイスを最適にカスタマイズできます。

インターネット上でアクセス可能なアプリケーションの作成

2007 Microsoft Office system で導入された Excel Services では、標準の Web ブラウザー ツールを使用して、ユーザーがブックと Excel の機能にアクセスする最善の方法を提供します。 .NET Framework 開発言語とリソースと共に、これらの技術は将来に渡ってユーザーにとって Excel 展開の重要な部分になります。

外部アプリケーションからの Excel の制御

Excel は、そのオブジェクト、メソッド、イベントを COM インターフェイス経由で公開します。 したがって、Excel セッションを開始して制御したり、既存の Excel セッションを制御したりするスタンドアロン アプリケーションを作成するために COM を使用できます。 C++ と VBA を含む、いくつかの開発言語で COM に公開されている Excel インターフェイスにアクセスできます。 C# と .NET Framework では、同様に Excel へのリモート アクセスと制御を可能にする Excel へのインターフェイスを提供します。

Excel の非同期呼び出し

Excel では、Excel が XLL にコントロールを渡した場合にのみ、XLL で C API を呼び出すことができます。 Excel によって呼び出されるワークシート関数は、C API を使用して Excel にコールバックできます。 Excel によって呼び出される XLL コマンドは、C API を呼び出すことができます。 VBA 自体が Excel によって呼び出されたときに VBA によって呼び出される DLL および XLL 関数とコマンドは、C API を呼び出すことができます。 たとえば、時間指定された Windows コールバックを XLL に設定し、そこから C API を呼び出すことはできません。また、XLL によって作成されたバックグラウンド スレッドから C API を呼び出すことはできません。 DLL または XLL から COM を使用して Excel を非同期的に呼び出すことはお勧めしません。

イベントに非同期に応答する Excel のアプリケーションがある場合、これには多くの制限があります。 たとえば、Excel がインターネット上のデータの一部を取得し、データが変更されるたびに再計算するようにしたいとします。 あるいは、バックグラウンド スレッドで計算を実行し、その終了時に Excel が再計算するようにしたい場合もあります。

Excel が変更をアクティブにポーリングするようにすれば実現できますが、これは Excel が頻繁に通常の処理を中断するので効率的ではありませんし、制限があります。 理想的なソリューションではありませんが、C API または VBA を使用して、時間指定で繰り返すコマンドを設定することもできます。

Ideally you would want a more efficient external process to check for the change in data, and for that external process to trigger Excel to retrieve the update and perform a recalculation. You can do this by using an application that interfaces to Excel by using COM. COM is not restricted in the same manner as the C API to making calls only when Excel has explicitly passed it control. COM applications can invoke Excel methods whenever Excel is in a ready state, although these method calls might be ignored if dialog boxes are being displayed, menus are pulled down, or when a macro is executing.

C API と XLM との関係

Excel マクロ (XLM) 言語は、Excel で提供された最初のユーザーがアクセスできるプログラミング環境でした。 ユーザーは、通常のワークシートのように見える特殊なマクロ シートにカスタム コマンドと関数を作成することが可能になりました。 XLM マクロ シートは、Excel 2013 では引き続きサポートされています。 SUMLOG などの通常のすべてのワークシート関数は、ワークシートに入力できない次の項目に加えて、マクロ シートで使用できます。

  • ���[�N�X�y�[�X���� ( GET.CELL�A GET.WORKBOOK �Ȃ�)�B

  • �ʏ�̃��[�U�[����̎�������\�ɂ���A�R�}���h�Ɠ����̊� ( DEFINE.NAME�A PASTE �Ȃ�)�B

  • �A�h�C���Ɋ֘A����� ( REGISTER �Ȃ�)�B

  • �R�}���h�Ɠ����̃C�x���g �g���b�v ( ON.ENRTY�A ON.TIME �Ȃ�)�B

  • �}�N�����ŗL�̑��� ( ARGUMENT�A VOLATILE �Ȃ�)�B

  • �t���[���䑀�� ( GOTO�A RETURN �Ȃ�)�B

Excel バージョン 3 には、C API の機能制限版が存在します。 しかし、Excel バージョン 4 では、XLM 言語が C API にマップされていました。 それ以降、DLL はすべてのワークシート関数、マクロ シート情報関数、コマンド、イベント トラップの設定を呼び出すことが可能になりました。 DLL は、C API 内部から XLM フロー制御関数を呼び出すことはできません。 これらのマクロ シート関数とコマンドは、ヘルプ ファイル XLMacr8.hlp (以前は Macrofun.hlp という名前でした) に記載されています。 このヘルプ ファイルを取得するには、 Microsoft ダウンロード センター に移動し、"XLMacr8.hlp" を検索します。

注:

[!����] Windows Vista �� Windows 7 �́A���ڂɂ� .hlp �t�@�C����T�|�[�g���Ă��܂���B�������A���̃t�@�C����J�����Ƃ̂ł��� [Windows Vista �p�� Windows �w���v �v���O���� (WinHlp32.exe)](�AWindows 7 �p�� Windows �w���v �v���O���� (WinHlp32.exe) �� Microsoft ����_�E�����[�h�ł��܂��B

DLL は、コールバック関数 Excel4Excel4vExcel12Excel12v (最後の 2 つは、Excel 2007 で導入された) を使用して、関数とコマンドに対応する C API を呼び出します。 各関数とコマンドに対応する列挙型の定数は、ヘッダー ファイルで定義され、引数の 1 つとしてこれらのコールバックに渡されます。 たとえば、xlfGetCell に対応する GET.CELLxlfRegister に対応する REGISTERxlcDefineName に対応する DEFINE.NAME です。

ワークシート関数、マクロ シート関数、コマンドを提供することに加えて、C API は DLL 内からこれらのコールバックを使用することによってのみ呼び出すことができる関数とコマンドの列挙体を提供します。 たとえば、xlGetName は、DLL が Excel に関数とコマンドを登録する場合に必要とする、DLL 自体の完全パスとファイル名を検出できるようにします。

Excel バージョン 5 での Visual Basic for Applications (VBA) シートの導入、バージョン 8 (Excel 97) での Visual Basic Editor (VBE) の導入以降、ユーザーが Excel をカスタマイズする最も容易な方法は、XLM の代わりに VBA を使用することです。 したがって、Excel のそれ以降のバージョンで導入された新しい機能の多くは、XLM または C API を介してではなく VBA を介して利用できます。 たとえば、いくつかのコマンド、イベント トラップ、拡張ダイアログ ボックス機能は、XLM または C API を介してではなく、VBA を介して利用できます。

�ڂ����́A�u[Excel �p C API �̐V�@�(what-s-new-in-the-c-api-for-excel.md)�v��������������B

関連項目

Excel 用 C API の新機能

C API コールバック関数 Excel4、Excel12

Excel XLL SDK の概要