Я пытаюсь создать функцию сброса электронной таблицы, чтобы очистить таблицу. Теперь я использую циклы для определения значений для каждого столбца. 'Dikte' Необходимо установить на 6. И первый столбец должен быть ложным. clearContent все очищает. Есть способ получше?

  var values = [];
  for (i = 0; i < 12; i++) {
    values.push([false,'','','','','6','0'])
  }
  var oldoak_data = SS.getRangeByName('oldoak_data').setValues(values);

Product table

2
amorz 11 Дек 2020 в 12:47

1 ответ

Лучший ответ

Пояснение:

Решение 1.

  • Вы можете избавиться от цикла for, используя карта. Это даст вам некоторый прирост производительности, поскольку map быстрее, чем обычные циклы.

  • Как правило, поскольку этот подход перезаписывает предыдущие значения, рекомендуется очистить содержимое перед установкой новых значений.

Решение 2:

  • Другая идея - определить объект листа по его имени. В моем случае Sheet1. Очистите только желаемый диапазон, 'A2:E13' и установите значения двух других столбцов на 6 и 0 соответственно. Не уверен, что этот подход быстрее, но он мог бы быть более эффективным.

Решения:

Решение 1.

function resetFields() {
  const SS = SpreadsheetApp.getActive();
  const rng = SS.getRangeByName('oldoak_data');
  const values = rng.getValues().map(r=>[false,'','','','','6','0'])
  rng.clearContent();
  rng.setValues(values);
}

Решение 2:

function resetFields() {
  const SS = SpreadsheetApp.getActive();
  const SH = SS.getSheetByName('Sheet1');
  const rngClear = SH.getRange('A2:E13');
  rngClear.clearContent();
  SH.getRange('F2:F13').setValue(6);
  SH.getRange('G2:G13').setValue(0);
}

Образец листа для решения 2:

example

2
Mario 11 Дек 2020 в 10:44