32 / 28 / 3
Регистрация: 16.12.2019
Сообщений: 106
|
|
1 | |
Проблема с Interop (Excel, Word)02.09.2021, 05:52. Показов 9231. Ответов 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 Работа с word и excel (Interop) |
Модератор
4303 / 3378 / 506
Регистрация: 27.01.2014
Сообщений: 6,180
|
|
02.09.2021, 06:34 | 2 |
Zhivoder, используйте "позднее связывание", тогда отпадет привязка к версии Interop.
или же использовать библиотеку Interop от Офиса 2010, тем самым все следующие версии офиса будут с ней совместимы. качать отсюда (Nuget) Думаю сейчас редко встретишь офис 2007, хотя, если есть, то лучще тогда версию 12 библиотеки использовать.
2
|
32 / 28 / 3
Регистрация: 16.12.2019
Сообщений: 106
|
|
02.09.2021, 07:01 [ТС] | 3 |
Yury Komar, можно чуть подробнее, что за "позднее связывание"?
А библиотеку можно включить в саму программу? Добавлено через 17 минут по первому вопросу нашел информацию читаю
0
|
Модератор
4303 / 3378 / 506
Регистрация: 27.01.2014
Сообщений: 6,180
|
|
02.09.2021, 07:09 | 4 |
Zhivoder, Вам ненужно носить эту библиотеку "с собой", она есть в установленном офисе, просто удаляете ссылку на вашу библиотеку от 2016-го офиса, устанавливаете необходимый NuGet пакет, ничего в коде менять не придётся.
Так как проект будет ссылаться на библиотеку от офиса 2010, то все последующие имеют обратную совместимость и успешно будут запускаться и работать. Позднее связывание неудобно при написании кода и отладке.
0
|
32 / 28 / 3
Регистрация: 16.12.2019
Сообщений: 106
|
|
02.09.2021, 07:45 [ТС] | 5 |
на VS2010 NuGet не поставить, попробую потанцевать с бубном...
0
|
Модератор
4303 / 3378 / 506
Регистрация: 27.01.2014
Сообщений: 6,180
|
|
02.09.2021, 08:29 | 6 |
Zhivoder, вытяните из пакета нужную dll
0
|
Модератор
4303 / 3378 / 506
Регистрация: 27.01.2014
Сообщений: 6,180
|
|
02.09.2021, 08:32 | 7 |
Вот попробуйте, вытащил из пакета:
0
|
Модератор
4303 / 3378 / 506
Регистрация: 27.01.2014
Сообщений: 6,180
|
|
02.09.2021, 08:35 | 8 |
Хотя, возможно у вас она тоже есть в системе, посмотрите в поиске по сборкам .NET, возможно нужно просто выбрать версию 12 или 14...
Если нет, используйте, вместо той, что сейчас используете, те, что я выше приложил. Повторюсь, ненужно их таскать с EXE'шником
0
|
32 / 28 / 3
Регистрация: 16.12.2019
Сообщений: 106
|
|
02.09.2021, 09:43 [ТС] | 9 |
Yury Komar, ссылку на библиотеку сделал, те, что были на 16 оффис удалил, проблема не ушла, вываливается исключение на других версиях:
Кликните здесь для просмотра всего текста
Подробная информация об использовании оперативной (JIT) отладки вместо данного диалогового окна содержится в конце этого сообщения. ************ Текст исключения ************ System.InvalidCastException: Невозможно привести COM-объект типа "Microsoft.Office.Interop.Excel.ApplicationClass" к интерфейсному типу "Microsoft.Office.Interop.Excel._Application". Операция завершилась со сбоем, поскольку вызов QueryInterface COM-компонента для интерфейса с IID "{000208D5-0000-0000-C000-000000000046}" возвратил следующую ошибку: Библиотека не зарегистрирована. (Исключение из HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED)). в System.StubHelpers.StubHelpers.GetCOMIPFromRCW(Object objSrc, IntPtr pCPCMD, IntPtr& ppTarget, Boolean& pfNeedsRelease) в Microsoft.Office.Interop.Excel.ApplicationClass.set_DisplayAlerts(Boolean RHS) в M20k20.Form1.Form1_Load(Object sender, EventArgs e) в System.EventHandler.Invoke(Object sender, EventArgs e) в System.Windows.Forms.Form.OnLoad(EventArgs e) в System.Windows.Forms.Form.OnCreateControl() в System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) в System.Windows.Forms.Control.CreateControl() в System.Windows.Forms.Control.WmShowWindow(Message& m) в System.Windows.Forms.Control.WndProc(Message& m) в System.Windows.Forms.ScrollableControl.WndProc(Message& m) в System.Windows.Forms.Form.WmShowWindow(Message& m) в System.Windows.Forms.Form.WndProc(Message& m) в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) в System.Windows.Forms.NativeWindow.Callback(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%82%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%20%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
|
Модератор
4303 / 3378 / 506
Регистрация: 27.01.2014
Сообщений: 6,180
|
|
02.09.2021, 09:51 | 10 |
Zhivoder, а другие версии офиса - это какие?
Добавлено через 3 минуты Да, наверное Вам будет лучше использовать позднее связывание, тогда проблему с библиотекой должны уйти. И да, офис должен быть установлен на всех компах, где используется ваше приложение.
0
|
32 / 28 / 3
Регистрация: 16.12.2019
Сообщений: 106
|
|
02.09.2021, 09:57 [ТС] | 11 |
Yury Komar, Он установлен везде, только на некоторых машинах другая версия оффиса.
Пробовал 12 версию, не помогла. Добавлено через 2 минуты office 2007
0
|
Модератор
4303 / 3378 / 506
Регистрация: 27.01.2014
Сообщений: 6,180
|
||||||
02.09.2021, 10:01 | 12 | |||||
Позднее связывание можно организовать так (перед этим удалив ссылки на Interop из проекта), далее, подтягиваеье библиотеку таким образом
Zhivoder, ну 12 версия должна сработать, возможно потому, что приложение ищет ссылку на библиотеку в том месте, откуда вы ее подключили, а ее там нет.
0
|
32 / 28 / 3
Регистрация: 16.12.2019
Сообщений: 106
|
|
02.09.2021, 10:07 [ТС] | 13 |
Yury Komar, Я тоже так подумал, но парадокс...на остальных машинах работает...
Про позднее связывание понял, пока оставлю на запасной вариант, еще помучаюсь, ну на крайняк попрошу сисадмина обновить оффис у сотрудницы)
0
|
Модератор
4303 / 3378 / 506
Регистрация: 27.01.2014
Сообщений: 6,180
|
|
02.09.2021, 10:11 | 14 |
Zhivoder, попробуйте зарегистрировать сборку 12й версии в своей системе и уже вибрать из списка GAC ссылку, а не явно указав файл. пересоберите и проверьте.
обязательно удаляйте все другие ссылки на эту библиотеку
0
|
2058 / 1476 / 383
Регистрация: 26.06.2017
Сообщений: 4,227
|
|
02.09.2021, 12:30 | 15 |
Мне сам подход к проблеме кажется не корректным. Вместо того чтобы жёстко фиксировать версию библиотеки лучше попытаться проверить какая(ие) уже зарегистрированы зарегистрирована ли вообще, а затем использовать самую свежую. Вот пример подключения библиотеки в коде.
1
|
32 / 28 / 3
Регистрация: 16.12.2019
Сообщений: 106
|
|
02.09.2021, 13:00 [ТС] | 16 |
Uswer, Мне понравился подход к делу, а где почитать как это использовать?
Ну Я имею ввиду, вот прописал строчку с дллимпорт, а дальше по коду надо что-то менять? Что в функцию за Дллимпорт вбивать? Добавлено через 8 минут что-то даже на майкрософтовском сайте информации не густо
0
|
Модератор
4303 / 3378 / 506
Регистрация: 27.01.2014
Сообщений: 6,180
|
|
02.09.2021, 13:00 | 17 |
Uswer, Хорошая идея, но, как ни крути, это, вроде, будет то же самое "позднее связывание", что и постом выше, создавая объект COM-сборки, который, в свою очередь, тоже берет актуальную версию, имеющуюся в системе и работает с ней.
0
|
2058 / 1476 / 383
Регистрация: 26.06.2017
Сообщений: 4,227
|
|
02.09.2021, 13:11 | 18 |
Да не густо, вот например
Насколько я понимаю после подключения библиотеки Вы просто вызываете методы, используете типы данных, которые описаны в этой библиотеке и т.п. В общем работаете так, как будто она подключена через Impots, т.е. в коде менять ничего не потребуется. Добавлено через 2 минуты Yury Komar, возможно и так, но ведь теперь в коде можно организовать разного рода проверки: посмотреть в реестр, поисках на дисках и т.д. и при наличии нескольких версий DLL подключить нужную (не обязательно самую свежую кстати). А главное понять, что сама библиотека есть.
0
|
Модератор
4303 / 3378 / 506
Регистрация: 27.01.2014
Сообщений: 6,180
|
|
02.09.2021, 13:17 | 19 |
Uswer, Удобно, че сказать. Надо попробовать будет.
0
|
32 / 28 / 3
Регистрация: 16.12.2019
Сообщений: 106
|
|||||||||||
02.09.2021, 13:30 [ТС] | 20 | ||||||||||
Блин ребят, Я не такой крутой как вы)))
1. Я отключаю ссылку на тот Интероп, что у меня есть? 2. Что пихать в функцию?
0
|
02.09.2021, 13:30 | |
02.09.2021, 13:30 | |
Помогаю со студенческими работами здесь
20
Interop.Microsoft.Office.Interop.Excel, как исправить ошибку несовместимости версий Interop.Microsoft.Office.Interop.Excel Как получить шапку Word, Microsoft.Office.Interop.Word? Работа с таблицей в Word через библиотеку Microsoft.Interop.Word Считать текст из Word посредством Microsoft.Office.Interop.Word Как задать стиль таблицы в Word через библиотеку Microsoft.Office.Interop.Word Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |