#javascript #google-apps-script #google-sheets #google-sheets-api
#javascript #google-apps-script #google-sheets #google-sheets-api
Вопрос:
Я пытаюсь создать функцию сброса электронной таблицы, чтобы очистить электронную таблицу. Теперь я использую циклы для определения значений для каждого столбца. 'Dikte'
Необходимо установить значение 6
. И первый столбец должен быть false . clearContent
очищает все. Есть ли более приятный способ?
var values = [];
for (i = 0; i < 12; i ) {
values.push([false,'','','','','6','0'])
}
var oldoak_data = SS.getRangeByName('oldoak_data').setValues(values);
Ответ №1:
Объяснение:
Решение 1:
- Вы могли бы избавиться от
for
цикла, используя map. Это даст вам некоторый прирост производительности, поскольку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:
Комментарии:
1. Решение 1, для меня это лучший подход. Решение 2, когда я добавляю новую строку перед столбцами заголовка. Изменяется относительная ссылка, например (A1:A10). Вот почему я использую именованные диапазоны.