0

我正在尝试使用 Office COM 组件来创建 Word 和 Excel 文档。不幸的是,我无法做到这一点,因为我遇到了一个错误。

在模块“{00020905-0000-0000-C000-000000000046}”中找不到“{00020906-0000-0000-C000-000000000046}”的 IDispatch,v8.3

我尝试重新安装 Office、我的应用程序 (ALBPM) 和我的界面 (combsvc),但它无法正常工作。

我想知道如何安装 IDispatch,或者如何知道它是否安装在正确的模块中。有时错误会说:

找不到“{000209FF-0000-0000-C000-000000000046}”的 IDispatch ... 而不是 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

4 回答 4

2

From the error you get I assume that you are using Word 2003.

Have you made sure that the COM brigde service is correctly installed and running?

combsvc -install
combsvc -start

will register combsvc as service and then start it.

Please also have a look at the example for Word at the bottom of page 150 in the ALBPM Reference Guide.

The fact that it is sometimes working and sometimes could be an issue with ALBPM. Are you using the latest version and updates?

Another option - and quite frequent problem with Word automation - would be that the automated instance of Word is displaying a modal dialog box and is waiting for user interaction. You can switch of the display of modal dialogs by setting

Application.DisplayAlerts = 0 

However, this will unfortunately not prevent all popups from being displayed.

Is there actually an instance of Word started? If so, can you make the Window visible and see if documents can be opened or if there is a popup blocking the application?

于 2009-01-16T00:04:38.063 回答
1

丹尼尔,

我在这里在黑暗中刺伤。看起来您正在使用 BEA 系统 Aqualogic BPM,我感觉它是一个基于 Java 的工具。从挖掘来看,commsvc 实际上是一个 COM 桥接服务,允许 ALBPM 从 Java 与 COM 对话:

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

于 2009-01-16T00:36:06.813 回答
0

要检查 PC 上安装的 COM 接口,我建议您下载 oleview.exe,它是Windows 2003 资源工具包的一部分

我实际上有 {00020906-0000-0000-C000-000000000046} 但也没有 IDispatch 接口,并且在尝试创建它的实例时出现“类未注册”错误。我的家用 PC 没有安装 Office,只安装了 Office 工具,这很可能是原因。

过去,在自动化 Office 应用程序时,我总是能够与版本无关的 ProgID 进行对话,例如“Excel.Application”。你确定你引用了正确的 COM 对象吗?在 oleview 中查看或给我们一些更多的代码来咀嚼:)

于 2009-01-16T00:27:20.030 回答
0

我正在使用的代码是这样的,但我什至看不到第一个日志,所以我认为连接有错误,而不是代码

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
于 2009-01-16T00:37:19.290 回答