0

我有两个对单个 Excel 文件进行操作的进程。

第一个过程创建 Excel 实例并打开/创建和激活工作簿和工作表。第二个过程输入电子表格。第一个进程将 Excel 句柄作为输出参数传递给第二个进程,但是当第二个进程尝试与工作簿交互时,会出现“给定键不在字典中”错误。

我推测句柄只是一个进程区分它所连接的Excel实例的一种手段,第二个进程需要连接到第一个进程打开的Excel实例。Excel VBO 包含可以提供此功能的附加和附加工作表页面,但我找不到 Excel VBO 的任何说明或文档。可能打开了多个 Excel 实例,我不确定如何引用正确的实例。

我需要将第二个进程连接到第一个进程打开的 Excel 实例的假设是否正确?如果是这样,我该怎么做?如果没有,谁能告诉我导致字典错误的原因以及我该如何解决?

4

1 回答 1

2

handles 由 MS Excel VBO 的特定实例在内存中进行内部跟踪。它们不在VBO 的实例之间共享。

鉴于上述情况,并假设您的代码完全按照您的描述设置(两个不同的过程),这是预期的行为:MS Excel VBO 的实例持有您尝试交互的 Excel 实例的句柄with 在进程结束时从内存中清除。


关于“附加”功能和相关文档:大多数开箱即用的 VBO都有可用文档,并且始终可以通过单击“i”按钮访问,如下面的屏幕截图中强调的那样:

蓝棱镜动作配置

单击此按钮会弹出一个 Internet Explorer 窗口,其中包含您在此窗口的“业务对象”字段中设置的特定对象的文档。在这种情况下,MS Excel VBO 操作“附加”具有以下描述:

1.3 附上

指向“打开实例”的向后兼容链接。这将打开找到的第一个正在运行的 Excel 实例并在此对象中链接到它。返回:
- handle : Number :一个整数,可以用来识别打开的实例。
- 启用事件:标志:指示应在附加实例上启用/禁用事件 - 默认为 True

在您的特定用例中,这可能是一个可行的操作。在大多数情况下/设计(尤其包括弹性考虑)中,应考虑自动化解决方案可能会无意中附加到另一个 Excel 实例(如果存在)。因此,您可能需要考虑重构流程设计,以便在同一 Blue Prism 流程中创建 Excel 实例并与之交互。如果您需要对启动 Excel 并处理处理的代码进行逻辑分离,您可以考虑使用单独的页面和页面引用,而不是完全使用单独的进程。


上面的最后一点非常适合您关于使用. handle冒着多余的风险:您的假设本身是正确的,但您可能需要考虑对您的流程进行轻微的重新设计。给定 Blue Prism 流程的最佳设计不太可能在一个流程中打开 Excel 实例,并且在另一个流程之前不与它交互。

于 2018-04-26T19:10:11.563 回答