На самом деле более вероятно, что версия времени выполнения, которая представляет проблему совместимости, а не PIA.
Когда он работает на чьей-то машине с 2007 года, он бомбит,
предположительно из-за разных
версии сборок Interop.
Я знаю, что это может "чувствовать" таким образом, но этот сценарий маловероятен. PIA Excel 2007 шире, чем PIA 2003 года, но не уже. Могут быть добавлены типы, члены и необязательные параметры, но более старые подписи 2003 года не будут изменены. Поэтому все ваши старые вызовы 2003 года будут работать одинаково, независимо от того, работают ли они через PIA 2003 или PIA 2007. Конечно, это не гарантировано на 100,00%, но, вероятно, примерно на 99,8%, я думаю.
Я надеялся, что кто-то знает способ
динамически изменить, какие / где
сборка загружается из в зависимости от
офисная версия (получение офиса
версия легко из реестра).
Вам потребуется использовать отражение, например, метод Assembly.LoadFrom . Но я действительно не думаю, что вам нужно идти по этому пути, честно. Фактически, чтобы доказать это, вы должны изменить ссылку в вашей сборке на версию 2007 года, скомпилировать ее и запустить. Я готов поспорить, что вы получите точно такую же ошибку.
Но с чего бы это? И как бы это исправить?
Проблем совместимости между объектной моделью Excel 2003 и Excel 2007 немного, но они есть. Одним из примеров является свойство Range.Cells.Count
, которое возвращает Int32 с максимальным значением +4,3 млрд. (Приблизительно). Однако с появлением в Excel 2007 гораздо больших таблиц число ячеек в электронной таблице фактически составляет около 17,2 млрд. Поэтому Range.Cells.Count
выдает исключение, если Диапазон слишком велик (например, содержит весь лист). Вместо этого вам нужно вызвать Range.Cells.CountLarge
, который, поскольку он возвращает Int64, может обработать больший результат.
Таким образом, скорее всего, проблема совместимости связана с версией времени выполнения, а не с PIA. Поэтому вам следует изолировать строку, которая выдает исключение, и сообщить нам, что это за сообщение об ошибке. Тогда, может быть, мы можем помочь ...
- Майк