Объединение ячеек Excel с помощью office.js

Я пытаюсь объединить некоторые ячейки с помощью API Office.js, как указано в вопросе. Я создал новую веб-добавку в проекте с помощью Visual Studio. Сгенерированный проект я оставил как есть, а добавил кнопку с обработчиком кликов для объединения ячеек вот код обработчика событий.

function mergingCells() {
   Excel.run(function (ctx) {
   var sheet = ctx.workbook.worksheets.getActiveWorksheet();
   var range = sheet.getRange('A1:D2');
   range.merge(false);
   return ctx.sync().then(function () {
   showNotification('Merging done',
   'Merged range is ' + range.address);
   });
   }).catch(errorHandler);
}

ошибка, которую я получаю: ошибка

ожидаемый результат: Ожидаемый результат


person Houss_gc    schedule 23.05.2017    source источник
comment
Не могли бы вы опубликовать полный фрагмент кода (могу ли я предложить сделать это с помощью ScriptLab)? Есть ли у вас соответствующая обработка ошибок, чтобы всплывать какие-либо проблемы? (Кроме того, кажется странным, что вы устанавливаете значения для B3:D5 относительно исходного диапазона — не могли бы вы нарисовать картину ожидаемого результата?)   -  person Michael Zlatkovsky - Microsoft    schedule 23.05.2017
comment
Я использовал шаблон Visual Studio как есть, ничего не менял. Я просто добавляю кнопку в html и обработчик события клика в Home.js (указанный в отредактированном вопросе).   -  person Houss_gc    schedule 24.05.2017
comment
Вот фрагмент лаборатории сценариев: pastebin.com/aV4xTgeB   -  person Houss_gc    schedule 24.05.2017


Ответы (1)


В вашем коде произошла ошибка, связанная с тем, что не был загружен адрес диапазона в файле .then. Но если я удалю range.address или вызову range.load("address") перед синхронизацией, код сработает.

Меня интересует одна вещь: какую версию Office вы используете? Если вы используете Office 2016 RTM (не Office 365 на основе подписки), метод слияния может быть просто недоступен (это только часть ExcelApi 1.2, а не ExcelApi 1.1, которая поставляется с RTM).

Вы можете увидеть, к какому набору API принадлежит конкретный API, в IntelliSense:

IntelliSense

См. https://dev.office.com/docs/add-ins/develop/office-versions для получения дополнительной информации о версии/разновидностях Office.

См. https://dev.office.com/docs/add-ins/develop/office-js-versioning для получения дополнительной информации о версиях Office JS и наборах требований.

К сожалению, RTM-версия Office 2016 не делала различий между недоступным API и некоторыми другими ошибками; так что они оба выглядят как InvalidArgument (но не для последующих версий).

person Michael Zlatkovsky - Microsoft    schedule 24.05.2017
comment
Спасибо, что ответили на мой вопрос. Теперь мне ясно, что RTM-версия Office 2016, которая у меня есть, больше не подходит для надстройки office.js, мне нужно перейти на Office 365. - person Houss_gc; 25.05.2017