首页 > 解决方案 > Office-JS 插件在多个打开的 Excel 中出现问题

问题描述

当我在多个打开的 Excel 实例中使用我的 Angular Excel 插件(Office js)时,我遇到了一些问题。

在更详细地描述问题之前,我想简要解释一下 AddIn 的作用:

用户可以在 Excel 中定义 UDF 函数以从服务器获取数据并在 Excel 中显示。但是,UDF 函数不会直接执行,而是仅在触发更新时执行。之后,请求被发送到服务器,数据被提取、格式化并显示在 Excel 中。如果用户单击“更新”按钮,则迭代工作簿中的所有工作表并搜索相应的 UDF 函数。请求直接发送到服务器。在某些情况下,响应请求并在 Excel 中显示数据可能需要一些时间(例如,当用户在 100 个工作表中定义了 100 个 UDF 函数,每个工作表包含一个 UDF)。

我目前有以下问题:

1) 如果用户打开了一个包含 100 个工作表中定义的 UDF 函数的 Excel 实例和另一个包含 70 个包含 UDF 函数的工作表的实例,当我在打开的 Excel 实例之间切换时出现“发生意外服务器错误”错误。更新没有运行,有时请求根本没有发送或无法处理。我认为以下代码段可能会导致此问题:

Excel.run(async context => { const sheet: Excel.Worksheet = context.workbook.worksheets.getActiveWorksheet(); ... }

context.workbook 始终返回当前打开的工作簿或当前在活动 Excel 实例中打开的工作簿。但我还没有找到按名称或 ID 访问工作簿的方法。

插件是否有可能只能在一种情况下正常工作,还是我做错了什么?

2) 如果您已经通过 AddIn 开始更新工作簿(例如 100 个具有 UDF 功能的工作表)并且 Excel 失去焦点(例如通过切换到 Word 或 Edge),那么正如 1) 中已经提到的,并非所有请求都已发送或处理.

我希望你们中的一些人已经遇到过类似的问题,并且可能有解决方案。

标签: excelangularoffice-jsuser-defined-functions

解决方案


感谢 Marco Siebert 向我们报告此问题。

对于 1#,这是我们现在正在调查的已知问题,它也在https://officespdev.uservoice.com/forums/224641-feature-requests-and-feedback/suggestions/39781582-fix-generalexceptions-being进行跟踪-throw-when-multiple-e ,

为了解决这个问题,我们需要修复这个场景中使用的每个 API,我们有一个工作项 3743479 来解决这个问题。您也可以在用户语音中支持此功能。此外,您能否分享一下您尝试在多个工作簿场景中使用的 API?

对于您的问题:“context.workbook 始终返回当前打开的工作簿或当前在活动 Excel 实例中打开的工作簿。但我还没有找到按名称或 ID 访问工作簿的方法。” 这是设计使然,因为 JS 插件是每个工作簿的。所以我们不支持访问另一个工作簿内容,除了 addFromBase64 API,它提供了将工作表从另一个工作簿复制到当前工作簿的功能。


推荐阅读