Excel get_Range отсутствует, когда сборка взаимодействия встроена в .NET 4.0 - PullRequest
7 голосов
/ 03 февраля 2010

Я строю сборку, ссылающуюся на DLL взаимодействия COM. Если я встраиваю типы взаимодействия COM, установив в свойствах ссылки (True2010) значение «Вставить типы взаимодействия» в значение «Истина», во время выполнения возникает ошибка «объект не содержит определения для get_Range». Если типы взаимодействия COM не внедрены, то ошибки не возникает.

Кто-нибудь знает, почему определенный метод, Worksheet.get_Range должен быть опущен или как обойти это или иметь какие-либо другие соответствующие идеи? Буду благодарен за любую помощь.

DLL взаимодействия содержит ссылку на Worksheet.get_Range (объект, [объект]). При использовании отражателя в моей вызывающей сборке нет никакого упоминания о get_Range в Worksheet.

Сборка взаимодействия, которую я внедряю, генерируется из Excel9.olb. Я не использую PIA, так как приложение предназначено для нескольких версий Excel.

Ответы [ 2 ]

10 голосов
/ 04 февраля 2010

Я еще не пробовал это сам, но я полагаю, что синтаксис изменился при использовании встроенных типов COM Interop в C # 4.0 на более «дружественный» C # синтаксис.

Поэтому вместо поискаВ методе get_Range(object, [object]) вы можете либо опустить необязательный параметр (вместо необходимости указывать Type.Missing), либо полностью отказаться от вызова метода доступа get и вместо этого ссылаться на имя свойства в квадратных скобках:

// Using C# 3.0:
Excel.Range range = worksheet.get_Range("A1", Type.Missing);

// Using C# 4.0, omitting the optional parameter:
Excel.Range range = worksheet.get_Range("A1");

// Using C# 4.0, utilizing square-bracket indexing:
Excel.Range range = worksheet.Range["A1"];

Из того, что я понимаю, вы все равно должны называть это «старым способом», где новый синтаксис индексатора действительно вызывает за кулисами требуемый метод доступа «get» и «set», так что я не будуЯ действительно знаю, почему у вас проблемы.Я предполагаю, что вам нужно искать под Worksheet.Range вместо Worksheet.get_Range в списке IntelliSense.Если это не работает для вас, значит, что-то может быть не так с вашей установкой или установкой.

Подробнее об этом см .: Индексированные свойства в C # 4.0 от Кирилла Осенкова.

Надеюсь, это поможет ...

Майк

1 голос
/ 10 мая 2010

Эта ошибка возникла как ошибка в Microsoft на стадии бета-тестирования https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=530769&wa=wsignin1.0 и была исправлена ​​как «По замыслу» после RTM. Ответ Майка Розенблюма там одобрен.

Это можно суммировать как Excel.Range r = sh.Range [sh.Cells [1, 1], sh.Cells [2, 2]]; где sh - это лист.

...