Excel get_Range пропавшие без вести, когда interop блок встраивается в.NET 4.0

Я создаю блок, ссылающийся на взаимодействующий с COM DLL. Если я встраиваю взаимодействующие с COM типы установкой Embed Interop Types to True в свойствах Ссылки (VS2010) во времени выполнения, ошибка происходит "объект, не содержит определение для get_Range". Если взаимодействующие с COM типы не встраиваются затем, никакая ошибка не происходит.

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

interop dll содержит ссылку на Рабочий лист get_Range (объект, [объект]). Используя отражатель на моем блоке вызова нет никакого упоминания о get_Range в соответствии с Рабочим листом.

interop блок, который я встраиваю, сгенерирован от Excel9.olb. Я не использую PIAs в качестве целей приложения несколько версий Excel.

7
задан Eilon 13 February 2010 в 02:50
поделиться

2 ответа

Я сам еще не пробовал это, но считаю, что синтаксис изменился при использовании встроенных типов взаимодействия COM в 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 Кирилла Осенкова.

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

Майк

10
ответ дан 6 December 2019 в 23:05
поделиться

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

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

1
ответ дан 6 December 2019 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: