excel - 当其他 Excel 实例具有焦点时,无法获取活动工作表或选定范围
问题描述
我正在维护一个 Office 加载项,它从服务器接收数据并将其写入活动工作表中的当前选择。
当我打开第二个工作簿时,第一个工作簿中的加载项无法再获取活动工作表。
当我专注于第一个工作簿时,它又开始工作了。
我正在尝试像这样获取活动工作表:
Excel.run(function (ctx) {
var sheet = ctx.workbook.worksheets.getActiveWorksheet();
// insert code following ...
}
我收到以下错误:
Error at WorksheetCollection.getActiveWorksheet
InvalidSelection: The current selection is invalid for this operation.
at Anonymous function
(https://appsforoffice.microsoft.com/lib/1/hosted/excel-win32-16.01.debug.js:12439:6)
at lib$es6$promise$$internal$$tryCatch
(https://appsforoffice.microsoft.com/lib/1/hosted/excel-win32-16.01.debug.js:9240:8)
at lib$es6$promise$$internal$$invokeCallback
(https://appsforoffice.microsoft.com/lib/1/hosted/excel-win32-16.01.debug.js:9250:8)
at lib$es6$promise$$internal$$publish
(https://appsforoffice.microsoft.com/lib/1/hosted/excel-win32-16.01.debug.js:9226:9)
at lib$es6$promise$asap$$flush
(https://appsforoffice.microsoft.com/lib/1/hosted/excel-win32-16.01.debug.js:9060:8)
获取工作簿的选定范围也不起作用:
Excel.run(function (ctx) {
var range = ctx.workbook.getSelectedRange().getCell(0, 0);
// ...
}
类似错误:
Error at Workbook.getSelectedRange
InvalidSelection: The current selection is invalid for this operation.
at Anonymous function
(https://appsforoffice.microsoft.com/lib/1/hosted/excel-win32-16.01.debug.js:12439:6)
at lib$es6$promise$$internal$$tryCatch
(https://appsforoffice.microsoft.com/lib/1/hosted/excel-win32-16.01.debug.js:9240:8)
at lib$es6$promise$$internal$$invokeCallback
(https://appsforoffice.microsoft.com/lib/1/hosted/excel-win32.16.01.debug.js:9250:8)
at lib$es6$promise$$internal$$publish
(https://appsforoffice.microsoft.com/lib/1/hosted/excel-win32-16.01.debug.js:9226:9)
at lib$es6$promise$asap$$flush
(https://appsforoffice.microsoft.com/lib/1/hosted/excel-win32-16.01.debug.js:9060:8)
这个问题最近才出现。
更新:原来之前的说法是错误的,行为总是这样(用没有安装任何更新的新 MSI 安装测试)。
我无法通过从 Visual Studio 启动两个实例来重现它。
在 Word 加载项中ctx.document.getSelection()
按预期工作。
对此我能做些什么吗?
解决方案
如果选择了第二个工作簿,则初始工作簿 - 因此您想要的工作表 - 将不再被标记为活动工作表。
在 Excel 工作簿中切换焦点时应小心使用 activeworksheet。
我的建议是捕获活动工作表的名称并将其存储在一个变量中,或者只是简单地对其进行硬编码,然后在以后的所有引用中使用这个变量
推荐阅读
- sql - SQL 查询 - 使用 ALL 和 '=' 运算符未获得预期结果
- python - 抓取许多页面但 URL 相同的动态 DataTable
- javascript - 如何在 mongo 集合中一次性查找、迭代和更新文档?
- c# - 使用 .NET 5 的问题
- excel - 以地址字符串为参考值的 Excel OFFSET 函数
- laravel - Laravel 验证消息包含“验证”。而不是自定义错误消息
- flutter - 选择 Tex Field flutter 时的输入警告
- python - 熊猫面具、GroupBy 和 CumSum
- visual-c++ - Visual Studio 2017。LNK1104:一次成功构建后无法打开文件 ....\Debug\....exe
- javascript - JS & HTML - 我如何嵌入随机视频?