2017-02-20 82 views
0

我想用下面的代碼來獲得Microsoft.Office.Interop.Excel.Range接口的屬性列表:Type.GetProperties返回空數組

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對象屬性(不是特定範圍)的工具,並且使用反射來獲取屬性列表似乎是最省力的方法。但我花了一段時間試圖在網上找到答案,爲什麼沒有typeof(Excel.Range).GetProperties()返回一個屬性列表。 – Roman

回答

1

自VS2010導入Office主互操作程序集(PIA)時,包含類型定義的默認機制是將它們作爲主程序集的一部分而不是單獨引用的庫(Dll)嵌入。此嵌入過程的一部分是從嵌入式定義中刪除未引用的類型成員。

在Solution Explorer中,展開References節點並選擇Interop.Microsoft.Office.Interop.Excel,然後右鍵單擊) - > Show Properties。您應該看到如下所示:

Property View 將「Embed Interop Types」更改爲false,驗證「Copy Local」也已自動更改爲True。爲「Interop.Microsoft.Office.Core」和「Interop.VBIDE」做同樣的事情。

現在,當你反映的託管包裝互操作類型,你會得到完整的類型定義。

+0

謝謝!我沒有參考文獻中的「Interop.Microsoft.Office.Core」和「Interop.VBIDE」。我更改了「Office.dll」(... \ Visual Studio工具的Office \ PIA \ Office15 \ Office.dll)嵌入到false,它現在正在工作! – Roman