.NET Office взаимодействие с использованием версии независимого офиса - PullRequest
3 голосов
/ 07 августа 2009

Я разработал приложение, которое импортирует данные в Microsoft Excel.

Я использую VS2005 + .NET 2.0, и Microsoft Office 2007 установлен на моем компьютере (Office 12).

Скомпилированное приложение работает нормально, если я запускаю его на своем компьютере, но при развертывании приложения на других компьютерах, скажем, те, которые используют более низкие версии (Office 2000), я получаю сообщение об ошибке:

Не удалось загрузить файл или сборку Microsoft.Office.Interop.Excel, версия 12.0.0.0

Как бы я тогда разрешил правильное выполнение моего приложения, независимо от того, установлен ли на компьютере Office (Excel)?

Спасибо.

Некоторые обновления: Я поместил две упомянутые библиотеки DLL, а именно Microsoft.Office.Interop.Excel.dll (версия 12.0.0.0) и Office.dll (версия 12.0.0.0), в папку bin. Для этой ссылки я установил свойства Copy Local = True, и при компиляции приложения библиотеки DLL копируются в папку отладки / выпуска.

Теперь, когда я пытаюсь запустить приложение, я уже вышел из ошибки: «Не удалось загрузить файл или сборку Microsoft.Office.Interop.Excel, версия 12.0.0.0»

но возникла другая ошибка: System.AccessViolationException: попытка чтения или записи в защищенную память. Это часто указывает на то, что другая память повреждена. в Microsoft.Office.Interop.Excel.WorkbookClass.SaveAs (имя файла объекта, объект FileFormat, пароль объекта, объект WriteResPassword, объект ReadOnlyRecommended, объект CreateBackup, XlSaveAsAccessMode AccessMode, объект ConflictResolution, объект AddToMru, объект TextCodepage *, объектный объект TextCodepage * Object, объект TextCodepage, объектный текстовый объект, текстовый объект 1017 *

Итак, как мне на самом деле создать приложение, которое сможет экспортировать данные в Excel независимо от установленной версии Office?

Спасибо.

Ответы [ 4 ]

2 голосов
/ 07 августа 2009

Посмотрите на MS Office Wrapper for .NET - это обертка, независимая от версии Office (testeod MS Office 97 - 2007 и работает).

1 голос
/ 07 августа 2009

В прошлом я обнаружил, что если вы убедитесь, что все ссылки на Office (т. Е. Не системные) настроены на локальное копирование, это будет работать.

Я обычно компилирую с PIA Office 2003 (которые вы можете получить с сайта Microsoft где-нибудь), и результат работал с Office 07. Я давно не пробовал Office 2000 или XP, поэтому не уверен, будет ли работать выход.

0 голосов
/ 07 августа 2009

У вас будет меньше проблем - но у вас все еще могут быть проблемы - если вы будете строить с Excel 2003 вместо Excel 2007.

SpreadsheetGear for .NET - это совместимая с Excel библиотека для .NET, которую вы можете развернуть вместе с вашим приложением, не беспокоясь о том, есть ли у ваших пользователей определенная версия Excel (она будет работать, даже если у них ее нет версия Excel).

Вы можете посмотреть образцы с исходным кодом C # и VB здесь и загрузить бесплатную пробную версию здесь .

Отказ от ответственности: я владею SpreadsheetGear LLC

0 голосов
/ 07 августа 2009

Это потому, что он специально ищет версию 12 этой сборки.

В вашем csproj найдите ссылку на эту сборку в папке References. Перейдите в Свойства для этой ссылки и включите Определенную версию в Ложь.

...