Интеграция COM из ALBPM - не удается найти IDispatch для '{00020906-0000-0000-C000-000000000046}'
Я пытаюсь использовать компоненты Office COM для создания документов Word и Excel. К сожалению, я не могу этого добиться, потому что получаю ошибку.
Не удается найти IDispatch для '{00020906-0000-0000-C000-000000000046}' в модуле '{00020905-0000-0000-C000-000000000046}', версия 8.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 или об этих записях в реестре, даже если вы подскажете, где найти дополнительную информацию об этом.
Большое спасибо. Дэниел.
4 ответа
Из полученной ошибки я предполагаю, что вы используете Word 2003.
Вы убедились, что служба COM brigde правильно установлена и работает?
combsvc -install
combsvc -start
зарегистрирует combsvc как сервис и запустит его.
Пожалуйста, взгляните также на пример для Word внизу страницы 150 в Справочном руководстве ALBPM.
Тот факт, что это иногда работает, а иногда может быть проблемой с ALBPM. Используете ли вы последнюю версию и обновления?
Другой вариант - и довольно частая проблема с автоматизацией Word - это то, что автоматизированный экземпляр Word отображает модальное диалоговое окно и ожидает взаимодействия с пользователем. Вы можете переключить отображение модальных диалогов, установив
Application.DisplayAlerts = 0
Однако, к сожалению, это не помешает отображению всех всплывающих окон.
Есть ли на самом деле экземпляр Word запущен? Если да, можете ли вы сделать окно видимым и посмотреть, можно ли открыть документы или есть всплывающее окно, блокирующее приложение?
Daniel,
Я беру удар здесь в темноте. Похоже, вы используете системы BEA Aqualogic BPM, которые, как я чувствую, являются инструментом на основе Java. Из всего этого видно, что combsvc на самом деле является службой COM-моста, позволяющей ALBPM общаться с COM из Java:
Я думаю, что это ваша точка отказа.
Что касается вашего вопроса по IDispatch, вы на самом деле не устанавливаете IDispatch. IDispatch - это интерфейс, используемый COM для представления объектов, методов и свойств для клиентов COM с поздней привязкой, таких как языки сценариев (например, ASP или VBScript). Это часть инфраструктуры COM, если она будет сломана, вы увидите гораздо больше проблем с вашей машиной.
Я бы посоветовал выложить вопрос здесь:
Код, который я использую, такой, но я не могу даже увидеть первый журнал, поэтому я предполагаю, что есть ошибка с соединением, а не с кодом
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
Чтобы проверить установленные COM-интерфейсы на вашем компьютере, я предлагаю вам скачать oleview.exe, который является частью набора ресурсов Windows 2003
На самом деле у меня {00020906-0000-0000-C000-000000000046}, но также нет интерфейса IDispatch, и я получаю сообщение об ошибке "Класс не зарегистрирован" при попытке создать его экземпляр. На моем домашнем ПК не установлены офисы, только инструменты Office, что, скорее всего, является причиной.
В прошлом при автоматизации приложений Office я всегда мог общаться с независимыми от версии ProgID, такими как "Excel.Application". Вы уверены, что ссылаетесь на правильные COM-объекты? Проверьте это в oleview или дайте нам немного кода, чтобы поработать:)