34 / 30 / 3
Регистрация: 16.12.2019
Сообщений: 110
|
|
Проблема с Interop (Excel, Word)02.09.2021, 05:52. Показов 9785. Ответов 28
Метки нет Все метки)
(
Здравствуйте!
Дорогие форумчане, написал программку для офиса, закинул на сервер, чтобы все могли пользоваться и столкнулся с проблемой. Дело в том, что там где Я ее писал был офис 2016 и на компьютерах с другой версией вылетала ошибка, так же вылетала ошибка если версия word, excel не активирована на компьютере. Пока вижу 2 пути решения: 1 - переустановить всем офис 2016 2 - попытаться в реестре поковыряться (сомнительный) Так вот, есть ли способ "вшить" interop в саму программу или иной способ обойти данную...ммм..."загвоздку"? =) Заранее спасибо. P.S. : Желательно не сильно кардинальный, чтобы не пришлось переделывать всё...
0
|
02.09.2021, 05:52 | |
Ответы с готовыми решениями:
28
Microsoft.Office.Interop.Excel.Application процессы Excel в памяти компьютера Работа с Excel через Microsoft.Office.Interop.Excel Не могу записать в файл Excel при Microsoft.Office.Interop.Excel.Application.Visible = False |
Модератор
![]() ![]() 4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
|
|
02.09.2021, 06:34 | |
Zhivoder, используйте "позднее связывание", тогда отпадет привязка к версии Interop.
или же использовать библиотеку Interop от Офиса 2010, тем самым все следующие версии офиса будут с ней совместимы. качать отсюда (Nuget) Думаю сейчас редко встретишь офис 2007, хотя, если есть, то лучще тогда версию 12 библиотеки использовать.
2
|
Модератор
![]() ![]() 4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
|
|
02.09.2021, 07:09 | |
Zhivoder, Вам ненужно носить эту библиотеку "с собой", она есть в установленном офисе, просто удаляете ссылку на вашу библиотеку от 2016-го офиса, устанавливаете необходимый NuGet пакет, ничего в коде менять не придётся.
Так как проект будет ссылаться на библиотеку от офиса 2010, то все последующие имеют обратную совместимость и успешно будут запускаться и работать. Позднее связывание неудобно при написании кода и отладке.
0
|
Модератор
![]() ![]() 4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
|
|
02.09.2021, 08:35 | |
Хотя, возможно у вас она тоже есть в системе, посмотрите в поиске по сборкам .NET, возможно нужно просто выбрать версию 12 или 14...
Если нет, используйте, вместо той, что сейчас используете, те, что я выше приложил. Повторюсь, ненужно их таскать с EXE'шником
0
|
34 / 30 / 3
Регистрация: 16.12.2019
Сообщений: 110
|
|
02.09.2021, 09:43 [ТС] | |
Yury Komar, ссылку на библиотеку сделал, те, что были на 16 оффис удалил, проблема не ушла, вываливается исключение на других версиях:
Кликните здесь для просмотра всего текста
Подробная информация об использовании оперативной (JIT) отладки вместо данного диалогового окна содержится в конце этого сообщения. ************ Текст исключения ************ System.InvalidCastException: Невозможно привести COM-объект типа "Microsoft.Office.Interop.Excel.Applicat ionClass" к интерфейсному типу "Microsoft.Office.Interop.Excel._Applica tion". Операция завершилась со сбоем, поскольку вызов QueryInterface COM-компонента для интерфейса с IID "{000208D5-0000-0000-C000-000000000046}" возвратил следующую ошибку: Библиотека не зарегистрирована. (Исключение из HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED)). в System.StubHelpers.StubHelpers.GetCOMIPF romRCW(Object objSrc, IntPtr pCPCMD, IntPtr& ppTarget, Boolean& pfNeedsRelease) в Microsoft.Office.Interop.Excel.Applicati onClass.set_DisplayAlerts(Boolean RHS) в M20k20.Form1.Form1_Load(Object sender, EventArgs e) в System.EventHandler.Invoke(Object sender, EventArgs e) в System.Windows.Forms.Form.OnLoad(EventAr gs e) в System.Windows.Forms.Form.OnCreateContro l() в System.Windows.Forms.Control.CreateContr ol(Boolean fIgnoreVisible) в System.Windows.Forms.Control.CreateContr ol() в System.Windows.Forms.Control.WmShowWindo w(Message& m) в System.Windows.Forms.Control.WndProc(Mes sage& m) в System.Windows.Forms.ScrollableControl.W ndProc(Message& m) в System.Windows.Forms.Form.WmShowWindow(M essage& m) в System.Windows.Forms.Form.WndProc(Messag e& m) в System.Windows.Forms.Control.ControlNati veWindow.OnMessage(Message& m) в System.Windows.Forms.Control.ControlNati veWindow.WndProc(Message& m) в System.Windows.Forms.NativeWindow.Callba ck(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) ************ Загруженные сборки ************ mscorlib Версия сборки: 4.0.0.0 Версия Win32: 4.8.4069.0 built by: NET48REL1LAST_B CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll ---------------------------------------- M2k20 Версия сборки: 1.0.0.0 Версия Win32: 1.0.0.0 CodeBase: file:///Y:/1.%20%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%8 2%D1%8B/28.%20%D0%9F%D0%A2%D0%A3%20%D0%AE%D0%93/11.%20%D0%9C%D0%B0%D1%82%D0%B5%D1%80%D0% B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE-%D1%82%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0% B5%D1%81%D0%BA%D0%BE%D0%B5%20%D1%81%D0%B D%D0%B0%D0%B1%D0%B6%D0%B5%D0%BD%D0%B8%D0 %B5/%D0%9C2k20/M2k20%20%D0%BD%D0%BE%D0%B2%D0%B0%D1%8F%2 0%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8F.ex e ---------------------------------------- Microsoft.VisualBasic Версия сборки: 10.0.0.0 Версия Win32: 14.8.3761.0 built by: NET48REL1 CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll ---------------------------------------- System Версия сборки: 4.0.0.0 Версия Win32: 4.8.4001.0 built by: NET48REL1LAST_C CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll ---------------------------------------- System.Core Версия сборки: 4.0.0.0 Версия Win32: 4.8.4110.0 built by: NET48REL1LAST_B CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll ---------------------------------------- System.Windows.Forms Версия сборки: 4.0.0.0 Версия Win32: 4.8.4042.0 built by: NET48REL1LAST_C CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll ---------------------------------------- System.Drawing Версия сборки: 4.0.0.0 Версия Win32: 4.8.3761.0 built by: NET48REL1 CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll ---------------------------------------- System.Configuration Версия сборки: 4.0.0.0 Версия Win32: 4.8.3761.0 built by: NET48REL1 CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll ---------------------------------------- System.Xml Версия сборки: 4.0.0.0 Версия Win32: 4.8.3761.0 built by: NET48REL1 CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll ---------------------------------------- System.Runtime.Remoting Версия сборки: 4.0.0.0 Версия Win32: 4.8.3761.0 built by: NET48REL1 CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll ---------------------------------------- может Я чего-то не так сделал?) Добавлено через 2 минуты может имело смысл 12 версию поставить... сейчас попробую
0
|
Модератор
![]() ![]() 4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
|
|
02.09.2021, 09:51 | |
Zhivoder, а другие версии офиса - это какие?
Добавлено через 3 минуты Да, наверное Вам будет лучше использовать позднее связывание, тогда проблему с библиотекой должны уйти. И да, офис должен быть установлен на всех компах, где используется ваше приложение.
0
|
Модератор
![]() ![]() 4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
|
||||||
02.09.2021, 10:01 | ||||||
Позднее связывание можно организовать так (перед этим удалив ссылки на Interop из проекта), далее, подтягиваеье библиотеку таким образом
Zhivoder, ну 12 версия должна сработать, возможно потому, что приложение ищет ссылку на библиотеку в том месте, откуда вы ее подключили, а ее там нет.
0
|
34 / 30 / 3
Регистрация: 16.12.2019
Сообщений: 110
|
|
02.09.2021, 10:07 [ТС] | |
Yury Komar, Я тоже так подумал, но парадокс...на остальных машинах работает...
Про позднее связывание понял, пока оставлю на запасной вариант, еще помучаюсь, ну на крайняк попрошу сисадмина обновить оффис у сотрудницы)
0
|
Модератор
![]() ![]() 4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
|
|
02.09.2021, 10:11 | |
Zhivoder, попробуйте зарегистрировать сборку 12й версии в своей системе и уже вибрать из списка GAC ссылку, а не явно указав файл. пересоберите и проверьте.
обязательно удаляйте все другие ссылки на эту библиотеку
0
|
02.09.2021, 12:30 | |
Мне сам подход к проблеме кажется не корректным. Вместо того чтобы жёстко фиксировать версию библиотеки лучше попытаться проверить какая(ие) уже зарегистрированы зарегистрирована ли вообще, а затем использовать самую свежую. Вот пример подключения библиотеки в коде.
1
|
34 / 30 / 3
Регистрация: 16.12.2019
Сообщений: 110
|
|
02.09.2021, 13:00 [ТС] | |
Uswer, Мне понравился подход к делу, а где почитать как это использовать?
Ну Я имею ввиду, вот прописал строчку с дллимпорт, а дальше по коду надо что-то менять? Что в функцию за Дллимпорт вбивать? Добавлено через 8 минут что-то даже на майкрософтовском сайте информации не густо ![]()
0
|
Модератор
![]() ![]() 4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
|
|
02.09.2021, 13:00 | |
Uswer, Хорошая идея, но, как ни крути, это, вроде, будет то же самое "позднее связывание", что и постом выше, создавая объект COM-сборки, который, в свою очередь, тоже берет актуальную версию, имеющуюся в системе и работает с ней.
0
|
02.09.2021, 13:11 | |
Да не густо, вот например
Насколько я понимаю после подключения библиотеки Вы просто вызываете методы, используете типы данных, которые описаны в этой библиотеке и т.п. В общем работаете так, как будто она подключена через Impots, т.е. в коде менять ничего не потребуется. Добавлено через 2 минуты Yury Komar, возможно и так, но ведь теперь в коде можно организовать разного рода проверки: посмотреть в реестр, поисках на дисках и т.д. и при наличии нескольких версий DLL подключить нужную (не обязательно самую свежую кстати). А главное понять, что сама библиотека есть.
0
|
34 / 30 / 3
Регистрация: 16.12.2019
Сообщений: 110
|
|||||||||||
02.09.2021, 13:30 [ТС] | |||||||||||
Блин ребят, Я не такой крутой как вы)))
1. Я отключаю ссылку на тот Интероп, что у меня есть? 2. Что пихать в функцию?
0
|
02.09.2021, 13:30 | ||||||
Помогаю со студенческими работами здесь
20
Работа с word и excel (Interop) Interop.Microsoft.Office.Interop.Excel, как исправить ошибку несовместимости версий Interop.Microsoft.Office.Interop.Excel Как получить шапку Word, Microsoft.Office.Interop.Word?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Результаты исследования от команды MCM (март 2025 г.)
Programma_Boinc 07.04.2025
Результаты исследования от команды MCM (март 2025 г. )
В рамках наших текущих исследований мы продолжаем изучать гены, которые имеют наибольшую вероятность развития рака легких, выявленные в рамках. . .
|
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
|
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
|
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
|
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
|
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
|
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
|
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
|
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
|
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
|