私は現在、動的型付けについて書いており、Excelの相互運用の例を挙げています。これまでOfficeの相互運用をほとんどやったことがなく、それが表れています。MSDN Office 相互運用チュートリアルC# 4 では_Worksheet
インターフェースを使用しますが、インターフェースもありますWorksheet
。違いがわかりません。
私の非常にシンプルなデモ アプリ (下記参照) では、どちらも問題なく動作しますが、ベスト プラクティスでどちらか一方が指示されている場合は、適切に使用することをお勧めします。
using System;
using System.Linq;
using Excel = Microsoft.Office.Interop.Excel;
class DynamicExcel
{
static void Main()
{
var app = new Excel.Application { Visible = true };
app.Workbooks.Add();
// Can use Excel._Worksheet instead here. Which is better?
Excel.Worksheet workSheet = app.ActiveSheet;
Excel.Range start = workSheet.Cells[1, 1];
Excel.Range end = workSheet.Cells[1, 20];
workSheet.get_Range(start, end).Value2 = Enumerable.Range(1, 20)
.ToArray();
}
}
私は、COM または Office の相互運用性について徹底的に調べることは避け、C# 4 の新機能だけを強調するようにしていますが、本当に愚かなことはしたくありません。
(上記のコードにも、本当に馬鹿げた部分があるかもしれません。その場合はお知らせください。単に「A1:T1」ではなく、別々の開始/終了セルを使用するのは意図的です。これにより、本当に 20 個のセルの範囲であることがわかりやすくなります。それ以外は、おそらく偶然です。)
では、_Worksheet
と のどちらを使用すべきでしょうかWorksheet
、またその理由は何でしょうか?
ベストアンサー1
私の記憶が正しければ (Excel PIA を分解してからかなり時間が経っているので、記憶が少し曖昧ですが)、次のようになります。
イベントは、本質的には、何かが発生したときにオブジェクトが呼び出すメソッドです。.NET では、イベントは単純にデリゲートです。しかし、COM では、一連のイベント コールバックをインターフェイスにまとめるのが一般的です。したがって、特定のオブジェクトには 2 つのインターフェイスがあります。つまり、「着信」インターフェイス (他のユーザーが呼び出すことが予想されるメソッド) と、「発信」インターフェイス (イベントが発生したときに他のユーザーが呼び出すことが予想されるメソッド) です。
作成可能なオブジェクトのアンマネージ メタデータ (タイプ ライブラリ) には、受信インターフェイス、送信インターフェイス、および「この受信インターフェイスとこの送信インターフェイスを実装する作成可能なオブジェクトです」ということを示すコクラスの 3 つの定義があります。
今では、タイプ ライブラリが自動的にメタデータに変換されるときに、残念ながら、これらの関係は保持されます。クラスとインターフェイスが管理された世界で期待されるものにもっと適合するように手動で生成された PIA があればよかったのですが、残念ながら、それは実現しませんでした。そのため、Office PIA には、一見奇妙な重複が満載で、作成可能なすべてのオブジェクトに、同じ内容の 2 つのインターフェイスが関連付けられているように見えます。インターフェイスの 1 つはコクラスへのインターフェイスを表し、もう 1 つはそのコクラスへの入力インターフェイスを表します。
_Workbook インターフェイスは、ワークブック コクラスの入力インターフェイスです。Workbook インターフェイスは、コクラス自体を表すインターフェイスであるため、_Workbook から継承されます。
簡単に言うと、便利であれば Workbook を使用します。_Workbook は実装の詳細が少しあります。