Office-JS 插件在多次打开时出现问题 Excel

Office-JS Addin having problems in multiple opened Excel

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

在我更详细地描述问题之前,我想对 AddIn 的作用做一个简短的解释:

用户可以在Excel中定义UDF函数,从服务器获取数据并在Excel中显示。但是,UDF 函数不会直接执行,只有在触发更新时才会执行。之后,向服务器发送请求,获取数据,格式化并显示在 Excel 中。如果用户点击 "Update" 按钮,将遍历工作簿中的所有工作 sheet 并搜索相应的 UDF 函数。请求直接发送到服务器。在某些情况下,响应请求和显示 Excel 中的数据可能需要一些时间(例如,当用户在 100 个工作 sheet 中定义了 100 个 UDF 函数,每个函数包含一个 UDF)。

我目前有以下问题:

1) 如果用户打开了一个 Excel 实例,其中定义了 100 个 worksheets 的 UDF 函数,另一个实例有 70 个 worksheets 包含 UDF 函数,我得到在打开的 Excel 个实例之间切换时出现 "An unexpected server error occurred" 错误。更新没有运行通过,有时请求根本不发送或无法处理。我认为以下代码片段可能会导致此问题:

Excel.run(异步上下文 => { const sheet: Excel.Worksheet = context.workbook.worksheets.getActiveWorksheet(); ... }

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

是否可能是 AddIn 只能在一个实例中正常工作,还是我做错了什么?

2) 如果您已通过插件开始更新工作簿(例如 100 个工作 sheet 具有 UDF 函数)并且 Excel 失去焦点(例如切换到 Word 或 Edge) , 那么正如 1) 中已经提到的那样,并不是所有的请求都被发送或处理。

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

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

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

进行跟踪

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

针对您的问题:"context.workbook always returns the currently open workbook or the one that is currently open in the active Excel instance. But I have not found a way to access a workbook by name or id." 这是设计使然,因为 JS 加载项是每个工作簿。所以我们不支持访问另一个工作簿内容,除了 addFromBase64 API 提供了将工作表从另一个工作簿复制到当前工作簿的功能。