2017-02-20 14 views
0

を返します。Type.GetPropertiesは、私は次のコードを使用してMicrosoft.Office.Interop.Excel.Rangeインターフェイスのプロパティのリストを取得したい空の配列

using Excel = Microsoft.Office.Interop.Excel; 
PropertyInfo[] info = typeof(Excel.Range).GetProperties(); 

結果は空の配列です:System.Reflection.PropertyInfo [0]

私に何か不足していますか?

+0

'Microsoft.Office.Interop.Excel'はすべてCOMオブジェクトです。それは反射になると非常に奇妙なことがあります。 Rangeオブジェクトのプロパティを取得することが、あなたの問題の解決策であることをやろうとしていますか? –

+0

@ScottChamberlain私は、Excelオブジェクトのプロパティを表示するツール(特にRangeではなく)を目指していました。プロパティのリストを取得するためにリフレクションを使用すると、労力を最小限に抑えることができました。しかし、私はかなり時間をかけて答えを見つけようとしましたが、なぜtypeof(Excel.Range).GetProperties()がプロパティのリストを返さないのですか? – Roman

答えて

1

Officeのプライマリ相互運用機能アセンブリ(PIA)をインポートするとき、型定義を組み込むための既定のメカニズムは、個別に参照されるライブラリ(Dll)ではなく、メインアセンブリの一部として埋め込むことです。この埋め込み処理の一部は、埋め込み定義から参照されていない型メンバーを削除することです。

ソリューションエクスプローラで、参照ノードを展開し、Interop.Microsoft.Office.Interop.Excelを選択し、右クリックして) - >プロパティを表示します。

Property View "Interop Typesを埋め込む"をfalseに変更すると、 "ローカルコピー"も自動的にTrueに変更されていることを確認してください。 「Interop.Microsoft.Office.Core」と「Interop.VBIDE」についても同じ操作を行います。

管理されたラッパー相互運用型を反映すると、完全な型定義が得られます。

+0

ありがとう!私はReferencesに "Interop.Microsoft.Office.Core"と "Interop.VBIDE"がありませんでした。私は "Office.dll"(Office \ PIA \ Office15 \ Office.dll用の... \ Visual Studio Tools)を変更しました。これを偽に埋め込みました。 – Roman

関連する問題