Сбросить флажки на ложь - PullRequest
0 голосов
/ 05 июля 2018

У меня есть таблица Google, где в столбце A есть флажки в каждой строке. Я написал скрипт для выполнения функции во всех строках, где отмечены флажки, но я хочу добавить в конце функцию сброса, чтобы все флажки были сняты снова после запуска сценария.

Я пытался использовать цикл for следующим образом:

var dataRange = sheet.getRange('A3:A');
var values = dataRange.getValues();

for (var i = 0; i < values.length; i++) {
  for (var j = 0; j < values[i].length; j++) {     
    if (values[i][j] == true) {
      values[i].setValue(false);
    }
  }    
} 

Но очевидно, что это не работает, так как я получаю сообщение об ошибке.

Кто-нибудь знает, как это можно сделать?

Ответы [ 4 ]

0 голосов
/ 11 марта 2019

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

0 голосов
/ 05 июля 2018

В качестве альтернативы, так как вы хотите снять отметку со всего диапазона (и во всех диапазонах есть флажки), просто выполните:

sheet.getRange('A3:A').setValue(false);

без проверки / зацикливания.

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

Это решение, опубликованное выше, сбрасывает все флажки; однако он также неожиданно изменяет ячейки со значением 1 в нем на FALSE.

Я хочу сделать скрипт для сброса флажков на ВСЕХ листах ...

function resetCheckBoxesAllSheets() {
var ss = SpreadsheetApp.getActive();
var allsheets = ss.getSheets();
for (var s in allsheets){
var sheet=allsheets[s]

var dataRange = sheet.getRange('A4:Z100');
var values = dataRange.getValues();
for (var i = 0; i < values.length; i++) {
  for (var j = 0; j < values[i].length; j++) {
    if (values[i][j] == true) {
      values[i][j] = false; // Modified
    }
  }
}
dataRange.setValues(values);


}//end of  sheets loop.
}// end of function...
0 голосов
/ 05 июля 2018

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

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

  • Причиной проблемы является values[i].setValue(false);. values[i] это массив. Пожалуйста, используйте диапазон для setValue().
    • Но использование setValue() в цикле for приводит к более высокой стоимости. Так что в этой модификации я использовал setValues().
  • Установите "false" в values, если values[i][j] равно "true".
  • Поместите измененные значения на лист, используя setValues().

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

var dataRange = sheet.getRange('A3:A');
var values = dataRange.getValues();
for (var i = 0; i < values.length; i++) {
  for (var j = 0; j < values[i].length; j++) {
    if (values[i][j] == true) {
      values[i][j] = false; // Modified
    }
  }
}
dataRange.setValues(values); // Added

Ссылка:

Если это не то, что вы хотите, пожалуйста, скажите мне. Я хотел бы изменить его.

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