Вы не можете программно указать, какую версию Excel использовать. PIA только определяют, какой интерфейс или объектную модель вы разрабатываете. Но какая версия Excel на самом деле работает, контролируется реестром.
Однако, когда дело доходит до запуска PIA, вы фактически будете работать с PIA самого высокого уровня, установленной в системе. Поэтому, если вы разрабатываете с использованием PIA Excel 2003, но на клиенте установлена Excel 2007 с PIA Excel 2007, ваш код будет работать с PIA Excel 2007 - и он должен работать нормально, поскольку PIA Excel 2007 имеет обратную совместимость. То есть каждая версия PIA с более высоким номером (и объектная модель Excel) обратно совместима с командами, скомпилированными для более старой PIA и более старой объектной модели Excel. Обратите внимание, что если на компьютере клиента установлены PIA Excel 2007 и Excel 2003, PIA с более высокой версией будет загружаться независимо от того, какая версия Excel запущена, поэтому PIA Excel 2007 будет работать, если будут доступны обе PIA.
[Правка. Одно предостережение: PIA Excel 2007 должен быть на 100% обратно совместим при использовании VB.NET или C # 4.0. При использовании C # 3.0 или ниже тот факт, что необязательные параметры действительно требуются при вызове из C # 3.0 или ниже, приведет к разрыву в некотором коде при работе с более поздней версией PIA или объектной моделью. Хотя это относительно редко, и в C # 4.0 эта проблема, теоретически, должна исчезнуть.]
Итак, у вас нет большого контроля над PIA, потому что PIA, с которой вы работали, фактически не контролирует, какая PIA будет фактически работать на клиентской машине.
Вы также не можете контролировать, какая версия Excel запущена. Например, когда вы создаете новый экземпляр Excel через:
Excel.Application excelApp = new Application();
Загружаемое приложение Excel устанавливается в соответствии с текущей версией, заданной в реестре. Текущая версия сохраняется в:
HKEY_CLASSES_ROOT\Excel.Application\CurVer
Похоже, что ключ 'CurVer' в вашем случае будет иметь значение по умолчанию 'Excel.Application.11' вместо 'Excel.Application.12'. Изменение только этого может помочь, но я бы предпочел сделать исправление, чтобы убедиться, что все параметры реестра исправлены правильно. (И я не мог знать, какими должны быть все настройки.) Хорошо, я просто нашел другой: вам также нужно изменить:
[HKEY_CLASSES_ROOT\CLSID\{00024500-0000-0000-C000-000000000046}\ProgID]
для хранения значения «Excel.Application.12». Но я бы настоятельно рекомендовал вместо этого провести ремонт. Я не знаю, какие другие настройки могут потребоваться изменить, поэтому менять их вручную немного рискованно.
Кроме того, вы также должны найти следующие ключи:
HKEY_CLASSES_ROOT\Excel.Application.11
HKEY_CLASSES_ROOT\Excel.Application.12
Потому что это версии Excel, которые вы установили.
(см. здесь для дальнейшего обсуждения.)
Я почти уверен, что это связано с
порядок установки: 2007 -> 2003
Да, это на 100% правильно. Вы можете попробовать запустить восстановление в Excel 2007, это будет проще всего сделать. Если это не работает, то я бы удалил оба, а затем переустановил оба. Я бы удалил Excel 2003, а затем удалил 2007 (в обратном порядке, в котором вы их установили), а затем установил Excel 2003 и затем установил Excel 2007, чтобы установить обе версии в правильном порядке.
Но имейте в виду, что при этом Excel 2007 будет запускаться по умолчанию при вызове Excel.Application excelApp = new Application()
.
Фактически рекомендуется использовать , а не , чтобы обе версии Excel работали на компьютере разработчика. Подробнее об этом см .:
Раньше у меня было несколько версий Excel на одной и той же машине для разработки, и я лично чувствовал, что недостатки не были такими сложными, как это звучат в этих статьях. В общем, Excel 2007 PIA обратно совместим с Excel 2003 PIA, и все работает отлично. Но однажды я попал в реестр, похожий на ваш, и решил «поступить правильно». Я удалил оба, а затем только переустановил Excel 2007.
Оттуда я установил Virtual PC, который является бесплатным (VMware на самом деле немного лучше, но не бесплатен), а затем установил мои более низкие версии Excel для 2003, 2002, 2000 и '97 на отдельных виртуальных машинах. Это определенно какая-то работа по настройке, но как только вы это сделаете, все будет на 100% чисто.
Тем не менее, я бы, вероятно, не хотел бы на самом деле разрабатывать для более низких версий Excel на ВМ, было бы слишком сложно использовать Visual Studio, размещенную на ВМ. Таким образом, эти виртуальные машины хороши только для тестирования развертывания, чтобы убедиться, что ваша система может работать с различными конфигурациями клиентов. Имеет смысл?
Надеюсь, это поможет!
Mike