Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/47: Рейтинг темы: голосов - 47, средняя оценка - 4.62
34 / 30 / 3
Регистрация: 16.12.2019
Сообщений: 110

Проблема с Interop (Excel, Word)

02.09.2021, 05:52. Показов 9785. Ответов 28
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!

Дорогие форумчане, написал программку для офиса, закинул на сервер, чтобы все могли пользоваться и столкнулся с проблемой.
Дело в том, что там где Я ее писал был офис 2016 и на компьютерах с другой версией вылетала ошибка, так же вылетала ошибка если версия word, excel не активирована на компьютере.
Пока вижу 2 пути решения:
1 - переустановить всем офис 2016
2 - попытаться в реестре поковыряться (сомнительный)
Так вот, есть ли способ "вшить" interop в саму программу или иной способ обойти данную...ммм..."загвоздку"? =)

Заранее спасибо.

P.S. : Желательно не сильно кардинальный, чтобы не пришлось переделывать всё...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.09.2021, 05:52
Ответы с готовыми решениями:

Microsoft.Office.Interop.Excel.Application процессы Excel в памяти компьютера
Добрый день, коллеги! Программа работает с файлами Excel. В каждой процедуре я указываю, что приложение должно быть не видимым...

Работа с Excel через Microsoft.Office.Interop.Excel
Необходимо реализовать програмку взаимодействующую с Excel в режиме реального времени. Проблем несколько: 1. Как сделать так,...

Не могу записать в файл Excel при Microsoft.Office.Interop.Excel.Application.Visible = False
Коллеги, доброго времени суток. Столкнулся с такой проблемой. Не могу записать в файл, когда установлена невидимость Excel. Далее...

28
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
02.09.2021, 06:34
Zhivoder, используйте "позднее связывание", тогда отпадет привязка к версии Interop.

или же использовать библиотеку Interop от Офиса 2010, тем самым все следующие версии офиса будут с ней совместимы.


качать отсюда (Nuget)

Думаю сейчас редко встретишь офис 2007, хотя, если есть, то лучще тогда версию 12 библиотеки использовать.
2
34 / 30 / 3
Регистрация: 16.12.2019
Сообщений: 110
02.09.2021, 07:01  [ТС]
Yury Komar, можно чуть подробнее, что за "позднее связывание"?
А библиотеку можно включить в саму программу?

Добавлено через 17 минут
по первому вопросу нашел информацию читаю
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
02.09.2021, 07:09
Zhivoder, Вам ненужно носить эту библиотеку "с собой", она есть в установленном офисе, просто удаляете ссылку на вашу библиотеку от 2016-го офиса, устанавливаете необходимый NuGet пакет, ничего в коде менять не придётся.
Так как проект будет ссылаться на библиотеку от офиса 2010, то все последующие имеют обратную совместимость и успешно будут запускаться и работать.

Позднее связывание неудобно при написании кода и отладке.
0
34 / 30 / 3
Регистрация: 16.12.2019
Сообщений: 110
02.09.2021, 07:45  [ТС]
на VS2010 NuGet не поставить, попробую потанцевать с бубном...
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
02.09.2021, 08:29
Zhivoder, вытяните из пакета нужную dll
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
02.09.2021, 08:32
Вот попробуйте, вытащил из пакета:
Вложения
Тип файла: zip Microsoft.Office.Interop.Word.dll.zip (267.9 Кб, 49 просмотров)
Тип файла: zip Microsoft.Office.Interop.Excel.dll.zip (400.6 Кб, 69 просмотров)
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
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
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
02.09.2021, 09:51
Zhivoder, а другие версии офиса - это какие?

Добавлено через 3 минуты
Да, наверное Вам будет лучше использовать позднее связывание, тогда проблему с библиотекой должны уйти. И да, офис должен быть установлен на всех компах, где используется ваше приложение.
0
34 / 30 / 3
Регистрация: 16.12.2019
Сообщений: 110
02.09.2021, 09:57  [ТС]
Yury Komar, Он установлен везде, только на некоторых машинах другая версия оффиса.
Пробовал 12 версию, не помогла.

Добавлено через 2 минуты
office 2007
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
02.09.2021, 10:01
Позднее связывание можно организовать так (перед этим удалив ссылки на Interop из проекта), далее, подтягиваеье библиотеку таким образом
VB.NET Скопировано
1
2
3
Dim objApp As Object = CreateObject("Excel.Application")
Dim objBook As Object = objApp.Workbooks.Open("D:\book1.xls")
'...далее все по той же схеме, как и у вас, только явное указание типов (WorkBook, WorkSheet и т.п. нужно заменить на Object)
Добавлено через 2 минуты
Zhivoder, ну 12 версия должна сработать, возможно потому, что приложение ищет ссылку на библиотеку в том месте, откуда вы ее подключили, а ее там нет.
0
34 / 30 / 3
Регистрация: 16.12.2019
Сообщений: 110
02.09.2021, 10:07  [ТС]
Yury Komar, Я тоже так подумал, но парадокс...на остальных машинах работает...
Про позднее связывание понял, пока оставлю на запасной вариант, еще помучаюсь, ну на крайняк попрошу сисадмина обновить оффис у сотрудницы)
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
02.09.2021, 10:11
Zhivoder, попробуйте зарегистрировать сборку 12й версии в своей системе и уже вибрать из списка GAC ссылку, а не явно указав файл. пересоберите и проверьте.

обязательно удаляйте все другие ссылки на эту библиотеку
0
2228 / 1549 / 393
Регистрация: 26.06.2017
Сообщений: 4,497
Записей в блоге: 1
02.09.2021, 12:30
Мне сам подход к проблеме кажется не корректным. Вместо того чтобы жёстко фиксировать версию библиотеки лучше попытаться проверить какая(ие) уже зарегистрированы зарегистрирована ли вообще, а затем использовать самую свежую. Вот пример подключения библиотеки в коде.
1
34 / 30 / 3
Регистрация: 16.12.2019
Сообщений: 110
02.09.2021, 13:00  [ТС]
Uswer, Мне понравился подход к делу, а где почитать как это использовать?
Ну Я имею ввиду, вот прописал строчку с дллимпорт, а дальше по коду надо что-то менять? Что в функцию за Дллимпорт вбивать?

Добавлено через 8 минут
что-то даже на майкрософтовском сайте информации не густо
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
02.09.2021, 13:00
Uswer, Хорошая идея, но, как ни крути, это, вроде, будет то же самое "позднее связывание", что и постом выше, создавая объект COM-сборки, который, в свою очередь, тоже берет актуальную версию, имеющуюся в системе и работает с ней.
0
2228 / 1549 / 393
Регистрация: 26.06.2017
Сообщений: 4,497
Записей в блоге: 1
02.09.2021, 13:11
Цитата Сообщение от Zhivoder Посмотреть сообщение
на майкрософтовском сайте информации не густо
Да не густо, вот например
Цитата Сообщение от Zhivoder Посмотреть сообщение
а дальше по коду надо что-то менять?
Насколько я понимаю после подключения библиотеки Вы просто вызываете методы, используете типы данных, которые описаны в этой библиотеке и т.п. В общем работаете так, как будто она подключена через Impots, т.е. в коде менять ничего не потребуется.

Добавлено через 2 минуты
Yury Komar, возможно и так, но ведь теперь в коде можно организовать разного рода проверки: посмотреть в реестр, поисках на дисках и т.д. и при наличии нескольких версий DLL подключить нужную (не обязательно самую свежую кстати). А главное понять, что сама библиотека есть.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
02.09.2021, 13:17
Uswer, Удобно, че сказать. Надо попробовать будет.
0
34 / 30 / 3
Регистрация: 16.12.2019
Сообщений: 110
02.09.2021, 13:30  [ТС]
Блин ребят, Я не такой крутой как вы)))

1. Я отключаю ссылку на тот Интероп, что у меня есть?
2. Что пихать в функцию?
VB.NET Скопировано
1
2
3
4
<DllImport("Microsoft.Office.Interop.Excel.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Public Shared Function LoadLibrary(ByVal libname As String) As IntPtr
 
    End Function
3. Если ответ на 1 вопрос "Да", то чем заменить подобного рода строки?
VB.NET Скопировано
1
2
Private ExcelApp As New Microsoft.Office.Interop.Excel.Application
    Private database As Microsoft.Office.Interop.Excel.Workbook
P.S. Объясните пожалуйста, можете обзываться))))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.09.2021, 13:30
Помогаю со студенческими работами здесь

Работа с word и excel (Interop)
Добрый вечер всем. Появился у меня вопрос по моему проекту. Написал я небольшую программку. Все работает: - программа запускается -...

Interop.Microsoft.Office.Interop.Excel, как исправить ошибку несовместимости версий
Error 1 Assembly 'Interop.Microsoft.Office.Interop.Excel, Version=1.7.0.0, Culture=neutral, PublicKeyToken=null' uses...

Interop.Microsoft.Office.Interop.Excel
Добрый день! Собственно есть Win10, Visual Studio 2019, есть MS Office 2007 с установленным Excel. При попытке подключиться к Excel...

Как получить шапку Word, Microsoft.Office.Interop.Word?
Всем доброго дня! Столкнулся с проблемой, не удается получить шапку doc документа. Само тело вытащить получается а вот с шапкой беда...

Работа с таблицей в Word через библиотеку Microsoft.Interop.Word
Здравствуйте, я продвинутый программист.Пишу программу и использованием библиотеки Microsoft.Interop.Word у меня возникло несколько проблем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Результаты исследования от команды 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. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер