Скрипт Google Apps для очистки диапазонов на основе одной ячейки TRUE/FALSE на другом листе

Я пытаюсь очистить содержимое 4 столбцов данных, основываясь на значении true/false одной ячейки на другом листе. Это мой второй сценарий. Я попытался использовать некоторые примеры из этих двух ссылок: [Google Apps Script для очистки нескольких диапазонов], и мне нужна кнопка для очистки нескольких диапазонов в электронной таблице Google. 2

Я не думаю, что я правильно называю значение моей триггерной ячейки. Я хотел бы, чтобы скрипт запускался в любое время, когда значение этой ячейки изменяется. Вот мой код:

function clearautocratFields(e) {

  /*  variables for the function: triggerCell: is contained in the 'Meet Ranges' sheet.  It is cell k2.  Can be TRUE/FALSE.
      dataSheet: is the sheet 'Form Responses 1'.  Thats where the cells are that I want to clear.
      The Ranges I want to change are 'fg2:fg, fh2:fh, fi2:fi, fj2:fj'*/

  var triggerCell = SpreadsheetApp.getActive().getSheetByName('Meet Ranges').getSheetValues('k', '2', 1, 1); 

  if (triggerCell == 'TRUE'){} else  // If the cell is true do nothing
  if (triggerCell == 'FALSE'){   // If the cell is false run the script



  var dataSheet = SpreadsheetApp.getActive().getSheetByName('Form Responses 1');// Range to clear
    sheet.getRange('fg2:fg').clearcontents();
    sheet.getRange('fh2:fh').clearcontents();
    sheet.getRange('fi2:fi').clearcontents();
    sheet.getRange('fj2:fj').clearcontents();
    }

}

2 ответа

Помимо разъяснений Сэнди Гуд о входных параметрах для getSheetValues вы ищете одно значение, и эта функция возвращает двумерный массив.

Более прямолинейно и, возможно, интуитивно используйте:

var sheet = SpreadsheetApp.getActive().getSheetByName('Meet Ranges')
var triggercell = sheet.getRange(2, 11).getValue(); // 'k' being column 11

Это вернет единственное значение, которое вы ищете.

В зависимости от того, как это значение указано в электронной таблице, вам может потребоваться соблюдать осторожность при обработке значения Falsey в K2. Если вы ищете явное "FALSE" как текстовые значения, тогда ваш скрипт работает.

Ваше сравнение неиспользованного "TRUE" значение предполагает, что вы можете иметь в виду другие варианты? Если вы этого не сделаете, просто сравните значение, которое вы явно ищете. Это сделает ваш сценарий более понятным, когда вы вернетесь к нему.

Синтаксис для метода `getSheetValues ​​():

getSheetValues(startRow, startColumn, number of Rows, number of Columns)

startRow Параметр должен быть целым числом. У вас есть строка.

getSheetValues('k', '2', 1, 1)

У меня была такая же проблема, и я нашел решение, и это очень просто.

Когда вы пытаетесь использовать логическую переменную TRUE или FALSE в IF, вы не должны выполнять никакой логики, потому что переменная TriggerCell уже имеет логический ответ на ваш вопрос.

Если ваша переменная TriggerCell принимает значение флажка, например, которое возвращает TRUE или FALSE, вы должны заменить свой код следующим образом:

    if (triggerCell){} // If TriggerCell is True, do nothiing.  
    else {             // If the cell is false run the script bellow

    var dataSheet = SpreadsheetApp.getActive().getSheetByName('Form Responses 1');
    sheet.getRange('fg2:fg').clearcontents();
    sheet.getRange('fh2:fh').clearcontents();
    sheet.getRange('fi2:fi').clearcontents();
    sheet.getRange('fj2:fj').clearcontents();
    }
Другие вопросы по тегам