. net основной COM с диапазоном Excel - PullRequest
0 голосов
/ 14 февраля 2020

У меня проблема с тем, что я не могу получить доступ к Name объекту диапазона. Итак, я вызываю Excel.Application.get_Range () и передаю имя. Он возвращает ненулевой объект, и я могу получить доступ к методам. Однако Range.Name возвращает System .__ ComObject (). Если я пытаюсь получить доступ к Range.Name.Name, я получаю исключение, подобное следующему

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: ''System.__ComObject' does not contain a definition for "Name"

Кроме того, этот проект является тем, который я перенес из. net Framework в. net Core. Точно такой же код работает в Framework. Я пробовал различные методы, чтобы определить, что является базовым типом (потому что он не является объектом Name). ITypeInfo возвращает имя типа: Имя, поэтому оно выглядит как объект имени.

Я не понимаю, почему не могу получить доступ к Name.Name в. net ядро. Когда я проверяю образец. net Core Excel, они никогда не обращаются к объекту имени.

Кроме того, я могу получить доступ к другим COM-объектам, таким как ListObject, просто отлично.

1 Ответ

0 голосов
/ 15 февраля 2020

Я понял, в чем проблема. Для всех, кто сталкивается с этим с. net Core, проблема в том, что ядро. net, по-видимому, не поддерживает динамические типы c через COM автоматически. Это обсуждается в следующей проблеме github Проблема Github о неработающей динамике c . Где это говорит о том, почему это не работает.

В принципе, для моего конкретного случая c мне нужно было привести тип вручную, и тогда это сработало. Это также влияет на использование типов COM IEnumerable, которые необходимо привести непосредственно к IEnumerable, прежде чем выполнять их итерацию.

Предполагая, что у вас есть следующее выражение using.

using Excel = Microsoft.Office.Interop.Excel;

Мне пришлось включить следующее:

return range.Name.Name;

в

return ((Excel.Name)range.Name).Name;

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

...