Интеграция COM из ALBPM — не удается найти IDispatch для «{00020906-0000-0000-C000-000000000046}»

Я пытаюсь использовать компоненты Office COM для создания документов Word и Excel. К сожалению, я не могу этого добиться, потому что получаю сообщение об ошибке.

Не удается найти IDispatch для «{00020906-0000-0000-C000-000000000046}» в модуле «{00020905-0000-0000-C000-000000000046}», v8.3

Я попытался переустановить Office, свое приложение (ALBPM) и свой интерфейс (combsvc), но это не работает.

Я хочу знать, как мне установить IDispatch или как узнать, установлен ли он в правильном модуле. Иногда ошибка говорит:

Не удается найти IDispatch для '{000209FF-0000-0000-C000-000000000046}'... вместо 00020906-0000-0000-C000-000000000046

Код, который я использую, генерирует эти ошибки:

wordAppl.visible = false
wordDocs = wordAppl.documents

contratoTemplate = "C:\\albpmFiles\\mandatory\\aTemplate.doc"
// .doc template
convenioTemplate = "C:\\albpmFiles\\mandatory\\ConvenioModificatorio.doc"
// .doc template
saveContrato = "C:\\albpmFiles\\temp\\"
// where to save.
saveConvenio = "C:\\albpmFiles\\temp\\"

contratoName = "NewContact.doc"
wordDoc = open(wordDocs, fileName : contratoTemplate)
bookmark = item(wordDoc.bookmarks, index : "atrDescripcion")

insertAfter bookmark.range
using text = instSolicitud.atrDescripcion
bookmark = item(wordDoc.bookmarks, index : "atrObjProveedor_atrNombre")
insertAfter bookmark.range
using text = instSolicitud.atrObjProveedor.atrNombre
bookmark = item(wordDoc.bookmarks, index : "atrObjProveedor_atrDireccion")
insertAfter bookmark.range
using text = instSolicitud.atrObjProveedor.atrDireccion
filename = saveContrato + contratoName

end

// Extras - Fin
saveAs wordDoc
using fileName = filename

Будем очень признательны за любую имеющуюся у вас информацию об IDispatch или этих записях реестра, даже если вы подскажете, где найти дополнительную информацию об этом.

Большое спасибо. Даниэль.


person Community    schedule 15.01.2009    source источник
comment
Пожалуйста, покажите код, который создает COM-объект. Код компилируется?   -  person Nick    schedule 16.01.2009
comment
Да.... пожалуйста, пришлите нам код! :)   -  person Kev    schedule 16.01.2009
comment
Также было бы полезно узнать вашу версию Office и возникает ли эта ошибка на вашем компьютере разработчика или на клиентском компьютере.   -  person Dirk Vollmar    schedule 16.01.2009
comment
Ну, дело в том, что я использую некоторый уровень интеграции, который каталогизирует COM-объект, предоставляемый этим мостом COM, он использует свой собственный язык (бизнес-язык PBL procress), и самое странное то, что иногда это работает, иногда нет. т.   -  person    schedule 16.01.2009
comment
@divo: профессиональный офис 2003. На обоих, иногда на моей машине, а иногда и работает. Всегда на клиентской (удаленной) машине.   -  person    schedule 16.01.2009
comment
Где и как создается объект wordAppl?   -  person Dirk Vollmar    schedule 16.01.2009


Ответы (4)


Судя по полученной вами ошибке, я предполагаю, что вы используете Word 2003.

Убедились ли вы, что служба моста COM правильно установлена ​​и работает?

combsvc -install
combsvc -start

зарегистрирует combsvc как сервис, а затем запустит его.

Также взгляните на пример для Word внизу страницы 150 в Справочное руководство по ALBPM.

Тот факт, что иногда это работает, а иногда может быть проблемой с ALBPM. Используете ли вы последнюю версию и обновления?

Другой вариант — и довольно частая проблема с автоматизацией Word — заключается в том, что автоматизированный экземпляр Word отображает модальное диалоговое окно и ожидает взаимодействия с пользователем. Вы можете отключить отображение модальных диалогов, установив

Application.DisplayAlerts = 0 

Однако, к сожалению, это не предотвратит отображение всех всплывающих окон.

Действительно ли запущен экземпляр Word? Если да, можете ли вы сделать окно видимым и посмотреть, можно ли открыть документы или есть всплывающее окно, блокирующее приложение?

person Dirk Vollmar    schedule 16.01.2009
comment
Вы правы, я использую Word 2003. С другой стороны, я не использую .Net. Я использую другое приложение, которое импортирует компоненты COM, COMBridge: edocs.bea.com/albsi/docs60/studio/index.html?t=studio/catalog / даже если функция установлена - person ; 16.01.2009
comment
Да, служба работает правильно, и мой код соответствует присланной вами ссылке. Дело в том, что я думаю, что combridge каким-то образом ошибочно указывает на другой модуль в реестре. И я не знаю, как это настроить. - person ; 16.01.2009
comment
Нет, ошибка возникает еще до того, как я доберусь до кода. Я думаю, что это может даже не подключаться. У меня есть журнал в начале кода, но я его даже не вижу. Так что я думаю, это не код, а соединение - person ; 16.01.2009
comment
Выполняли ли вы шаги на стр. 150 (Каталог COM-компонента) в этом pdf-документе для настройки библиотек типов Word? Какую библиотеку вы выбрали? - person Dirk Vollmar; 16.01.2009
comment
Да, я следовал инструкциям. Библиотека, которую я выбрал: Microsoft Word 11.0 Object Library - person ; 16.01.2009
comment
Кстати, что вы на самом деле делаете с Word/Excel? Возможно, есть лучшие способы решения проблемы, чем использование COM-моста. Звучит медленно и подвержено ошибкам в любом случае... - person Dirk Vollmar; 16.01.2009
comment
Ну я просто беру шаблон, вставляю какие-то данные и сохраняю под новым именем - person ; 16.01.2009

Даниэль,

Я беру удар в темноте здесь. Похоже, вы используете системы BEA Aqualogic BPM, которые, как мне кажется, основаны на Java. Судя по копаниям, combsvc на самом деле является службой COM-моста, позволяющей ALBPM общаться с COM с Java:

http://edocs.bea.com/albsi/docs60/studio/index.html?t=studio/catalog/catalog_component/COM/c_COM_Bridge.html

Я думаю, что это ваша точка отказа.

Что касается вашего вопроса об IDispatch, вы на самом деле не устанавливаете IDispatch. IDispatch — это интерфейс, используемый COM для предоставления объектов, методов и свойств клиентам автоматизации COM с поздней привязкой, таким как языки сценариев (например, ASP или VBScript). Это часть инфраструктуры COM, и если бы она была нарушена, вы бы столкнулись с гораздо большим количеством проблем с вашей машиной.

Я бы, наверное, посоветовал задать вопрос здесь:

http://forums.oracle.com/forums/forum.jspa?forumID= 560

person Kev    schedule 16.01.2009
comment
Вы правы, я использую ALBPM и основан на Java. Я согласен, что это может быть точкой отказа, но, к сожалению, это закрытый компонент, поэтому я думаю, мне нужно проверить, существуют ли реестры там, где ищет combridge? - person ; 16.01.2009

Чтобы проверить установленные COM-интерфейсы на вашем ПК, я предлагаю вам загрузить oleview.exe, который является частью комплект ресурсов Windows 2003

На самом деле у меня есть {00020906-0000-0000-C000-000000000046}, но также нет интерфейса IDispatch, и я получаю ошибку «Класс не зарегистрирован» при попытке создать его экземпляр. На моем домашнем ПК не установлен офис, а только инструменты Office, что, скорее всего, и является причиной.

В прошлом при автоматизации приложений Office я всегда мог обращаться к независимым от версии идентификаторам ProgID, таким как «Excel.Application». Вы уверены, что ссылаетесь на правильные COM-объекты? Проверьте это в oleview или дайте нам еще немного кода, чтобы пожевать :)

person Martijn Laarman    schedule 16.01.2009

Код, который я использую, таков, но я даже не вижу первый журнал, поэтому я предполагаю, что ошибка связана с соединением, а не с кодом.

wordAppl.visible = false
wordDocs = wordAppl.documents



contratoTemplate = "C:\\albpmFiles\\mandatory\\aTemplate.doc"

// .doc template
convenioTemplate = "C:\\albpmFiles\\mandatory\\ConvenioModificatorio.doc"

// .doc template
saveContrato = "C:\\albpmFiles\\temp\\"

// where to save.
saveConvenio = "C:\\albpmFiles\\temp\\"


contratoName = "NewContact.doc"

wordDoc = open(wordDocs, fileName : contratoTemplate)


bookmark = item(wordDoc.bookmarks, index : "atrDescripcion")

insertAfter bookmark.range
using text = instSolicitud.atrDescripcion

bookmark = item(wordDoc.bookmarks, index : "atrObjProveedor_atrNombre")

insertAfter bookmark.range
using text = instSolicitud.atrObjProveedor.atrNombre

bookmark = item(wordDoc.bookmarks, index : "atrObjProveedor_atrDireccion")

insertAfter bookmark.range
using text = instSolicitud.atrObjProveedor.atrDireccion


filename = saveContrato + contratoName


end



// Extras - Fin
saveAs wordDoc
using fileName = filename
person Community    schedule 16.01.2009
comment
Если вы удалите весь код и оставите только первое сообщение журнала, получите ли тогда запись в журнале? - person Dirk Vollmar; 16.01.2009
comment
Где и как вы создаете объект wordAppl? Кстати, образцы из документации используют другой синтаксис для открытия документа Word (откройте worddocs, используя fileName = C:\\tmp\\input.doc, возвращающий worddoc). Ваш тоже правильный? - person Dirk Vollmar; 16.01.2009
comment
Я добавил этот код к вашему основному вопросу. В будущем это место здесь зарезервировано для ответов на ваш вопрос. Так что было бы уместно публиковать здесь только в том случае, если вы нашли ответ на свой вопрос и захотели его узнать. В противном случае просто отредактируйте исходный вопрос. - person mmcdole; 16.01.2009
comment
@диво. Да, они эквивалентны. У этого инструмента есть несколько вариантов кода, у меня есть VB.net, например, java, CIL для (общий язык интеграции), который вы упомянули, и PBL, который использует Дэниел. - person OscarRyz; 16.01.2009