Не удается получить активный рабочий лист или выбранный диапазон, когда другой экземпляр Excel имеет фокус - PullRequest
0 голосов
/ 19 февраля 2019

Я поддерживаю надстройку 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() работает как положено.

Могу ли я с этим что-нибудь сделать?

Ответы [ 3 ]

0 голосов
/ 20 февраля 2019

У меня сложилось впечатление, что это работает так.Когда вы говорите, что раньше он работал, могли бы вы предоставить больше информации о том, какая сборка / версия Excel использовалась раньше?Мы проведем дополнительные исследования, чтобы выяснить, является ли это изменением поведения.

Если книга не активна, то ожидается, что getActiveWorksheet () завершится сбоем, поскольку она не находится в активном состоянии.

0 голосов
/ 20 февраля 2019

Обходной путь - зарегистрировать WorksheetActivationEvent, отследить имя рабочего листа в событии, а затем вы можете использовать, чтобы получить выбранный рабочий лист по имени, когда ваша рабочая книга потеряла фокус.

было бы здорово, если бы вы могли поделиться своим сценарием, который поможет нам лучше понять проблему.

0 голосов
/ 19 февраля 2019

Если выбрана вторая рабочая книга, первоначальная рабочая книга и, следовательно, требуемая рабочая таблица больше не будут помечаться как активные рабочие листы.

При переключении фокуса в рабочих книгах Excel следует соблюдать осторожность при использовании активного рабочего листа.

Мой совет: перехватить и сохранить имя активной рабочей таблицы в переменной или просто записать ее в виде жесткого кода, а затем использовать эту переменную во всех будущих ссылках

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...