Я поддерживаю надстройку 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() работает как положено.
ctx.document.getSelection()
Могу ли я с этим что-нибудь сделать?
У меня сложилось впечатление, что это работает так.Когда вы говорите, что раньше он работал, могли бы вы предоставить больше информации о том, какая сборка / версия Excel использовалась раньше?Мы проведем дополнительные исследования, чтобы выяснить, является ли это изменением поведения.
Если книга не активна, то ожидается, что getActiveWorksheet () завершится сбоем, поскольку она не находится в активном состоянии.
Обходной путь - зарегистрировать WorksheetActivationEvent, отследить имя рабочего листа в событии, а затем вы можете использовать, чтобы получить выбранный рабочий лист по имени, когда ваша рабочая книга потеряла фокус.
было бы здорово, если бы вы могли поделиться своим сценарием, который поможет нам лучше понять проблему.
Если выбрана вторая рабочая книга, первоначальная рабочая книга и, следовательно, требуемая рабочая таблица больше не будут помечаться как активные рабочие листы.
При переключении фокуса в рабочих книгах Excel следует соблюдать осторожность при использовании активного рабочего листа.
Мой совет: перехватить и сохранить имя активной рабочей таблицы в переменной или просто записать ее в виде жесткого кода, а затем использовать эту переменную во всех будущих ссылках