Excel JS API — скопируйте и сохраните ТОЧНЫЕ значения диапазона, форматы и формулы в файле json, который будет использоваться позже для генерации того же диапазона значений

#office-js

#office-js

Вопрос:

С помощью office js api вы можете скопировать диапазон ячеек в другой диапазон ячеек и сохранить все значения, формулы и форматы, используя код, который выглядит примерно так:

 sheet.getRange(“A1”).copyFrom("M9:R424");
  

Я хочу дублировать эту функциональность, но вместо того, чтобы сохранять значения, формулы и форматы ячеек в файле Excel, я хотел бы сохранить их в файле json (в базе данных вне приложения), чтобы я мог динамически создавать таблицы с диапазонами / ячейками по мере необходимости, чтобы уменьшить размер файла Excel и убедиться, что пользователи случайно не редактируют диапазоны шаблонов.

До сих пор мне удавалось копировать значения и формулы из json, но у меня возникли проблемы с форматами. Из диапазона можно получить объект format:

 range.format
  

Но когда я конвертирую этот формат в json с помощью:

 range.format.toJSON()
  

Не хватает значительного количества параметров (например, цвета заливки ячейки, контура границы).

Кто-нибудь знает более оптимальный способ преобразования форматов диапазона в json или для хранения и репликации этих данных?

Ответ №1:

У нас есть классы RangeFill и RangeBorderCollection, вы могли бы использовать toJSON() API для получения цвета заливки ячейки и цвета границы.

   await Excel.run(async (context) => {

    var range = context.workbook.getActiveCell();
    range.format.fill.load();
    range.format.borders.load();
    await context.sync();

    var JSON = range.format.fill.toJSON();
    var JSON2 = range.format.borders.toJSON();

    console.log(JSON);
    console.log(JSON2);

  });
  

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

1. Я думаю, что это поможет мне двигаться в правильном направлении, так что спасибо за это. Можете ли вы опубликовать фрагмент кода с примером использования API toJSON()? Всякий раз, когда я использую его, я получаю пустой объект, так что я, очевидно, делаю что-то неправильно. Кроме того, есть ли способ получить все эти свойства за один прогон, а не вызывать их по отдельности? Спасибо!

2. Я подготовлю его для вас в начале следующей недели

3. Спасибо! Я ценю ваше время!

4. Я просто обновляю пример кода. спасибо за напоминание