Excel: как определить, находится ли ячейка в режиме редактирования перед запуском context.sync()

#excel #office-js #office-js-ux

#excel #office-js #office-js-ux

Вопрос:

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

Я хотел бы использовать delayForCellEdit в Excel.Запустить, но это приведет к зависанию пользовательского интерфейса, пока пользователь не выйдет из режима редактирования.

Есть ли способ определить, находится ли Excel в режиме редактирования перед вызовом context.sync?

Мое первое желание — запустить

 Excel.run(ctx => { 
  ctx.sync().then(() => { 
    console.log("not in edit mode); 
  }).catch(err => { 
    console.log("in edit mode");
  });
});
 

как сердцебиение каждые несколько секунд, но хотелось бы чего-то более элегантного.

Ответ №1:

В настоящее время мы поддерживаем только delayForCellEdit задержку context.sync() до выхода из режима редактирования. И я тестировал локально, не столкнулся с проблемой зависания, как вы упомянули.

Вот мой пример кода для тестирования и просто для справки: $("#run").click(() => tryCatch(run));

 async function run() {
  await Excel.run({ delayForCellEdit: true }, async context => {
    let sheet;
    sheet = context.workbook.worksheets.getItem("Sheet1");
    let range = sheet.getRange("A1");
    range.values = [["1"]];
    await context.sync();
  }); 
}
 

Комментарии:

1. Пожалуйста, добавляйте вопросы только в комментариях.

2. Это прискорбно. Проблема заключается в том, как наша надстройка кодируется и извлекает сохраненные данные перед инициализацией. Я надеялся, что есть способ обнаружить это, чтобы отобразить сообщение пользователю без грубого принуждения.

3. Итак, зависание не связано с ‘delayForCellEdit’, верно?

4. И что касается вашего требования, вы имеете в виду, что вы извлекаете данные для размещения на листе Excel, и вы не хотели, чтобы пользователи прерывали выполнение, отображая сообщение, если пользователи пытаются отредактировать лист?

5. @gingerjiang мы сопоставляем сохраненные данные при запуске, поэтому добавление зависает, потому что мы не можем получить сохраненные данные и загрузить пользовательский интерфейс. Мы также не хотим, чтобы пользователи редактировали ячейку при загрузке новых данных, потому что это может быть медленным процессом в зависимости от объема данных, которые они запрашивают у нашей службы.