Получить, изменить, установить значения без нарушения формул в Google Sheet с помощью скриптов - PullRequest
0 голосов
/ 20 февраля 2019

Мне нравится читать диапазон данных в листе Google, используя скрипты, изменять данные и затем записывать их обратно.

var range = sheet.getDataRange();
var values = range.getValues();
// modify the values
range.setValues(values);

Пока все хорошо, но мой лист также содержит формулы, которые теперь заменяютсяс фиксированными значениями, которые так изменили мой код:

var range = sheet.getDataRange();
var values = range.getValues();
var formulas = range.getFormulas();
// modify the values
range.setValues(values);
range.setFormulas(formulas);

Но теперь все мои данные очищаются на setFormulas(), и я изо всех сил стараюсь решить эту проблему.Основной причиной моего подхода является быстрое выполнение сценария, поскольку на листе много данных.

Т.е. я изменяю только некоторые данные, но хочу сохранить формулы.

1 Ответ

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

Как насчет этой модификации?

Точки модификации:

  • В вашей ситуации сначала запускается range.setValues(values).Значения помещаются в ячейки.Затем при запуске range.setFormulas(formulas) значения в массиве formulas также не помещаются в ячейки.Таким образом, ячейки со значениями очищаются.
    • Чтобы избежать этого, в качестве метода он создает массив, который объединяет values и formulas.И он помещает массив в ячейки.

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

Модифицированный скрипт:

Пожалуйста, измените его следующим образом.

С:
range.setValues(values);
range.setFormulas(formulas);
Кому:
var data = values.map(function(row, i) {
  return row.map(function(col, j) {
    return formulas[i][j] || col;
  });
});
range.setValues(data);

Ссылка:

Если я неправильно понял ваш вопрос, пожалуйста, сообщите мне.Я хотел бы изменить его.

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