2017-02-20 47 views
0

Я хочу, чтобы получить список свойств интерфейса Microsoft.Office.Interop.Excel.Range, используя следующий код: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

Поскольку VS2010 при импорте первичных сборщиков Office (PIA), механизм по умолчанию для включения определений типов заключается в том, чтобы вставлять их как часть основной сборки, а не как библиотеки с отдельными ссылками (Dll). Часть этого процесса внедрения заключается в удалении элементов из списка без ссылок из встроенного определения.

В Обозревателе решений разверните узел Ссылки и выберите Interop.Microsoft.Office.Interop.Excel, а затем щелкните правой кнопкой мыши) -> Показать свойства. Вы должны увидеть что-то вроде этого:

Property View Измените «Вставить типы взаимодействия» на false, убедитесь, что «Копировать локальную» также автоматически изменилось на «Истина». Сделайте то же самое для «Interop.Microsoft.Office.Core» и «Interop.VBIDE».

Теперь, когда вы отражаете типы взаимодействия управляемого обертки, вы получите полное определение типа.

+0

Спасибо! У меня не было «Interop.Microsoft.Office.Core» и «Interop.VBIDE» в ссылках. Я изменил «Office.dll» (... \ Visual Studio Tools for Office \ PIA \ Office15 \ Office.dll) Вставить в false, и теперь он работает! – Roman