Как получить диапазон, а затем установить значение в скрипте Google Apps - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь запустить функцию редактирования, которая будет искать значение «c» в диапазоне ячеек, а затем заменять его словом «Закрыто».

Это то, что я до сих пор:

function onEdit(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var data = sheet.getRange('CA12:CA15').getValues();
  var closed = 'c'
  for(var i=0; i<data.length;i++) {
  if(data[i] == closed) {

    Logger.log('yes')
    Logger.log(data[i]);    
  }
    }
  }

Таким образом, это успешно регистрирует «да» и значение «с», когда у меня есть это значение в заданном диапазоне.Но как мне теперь заменить это значение?

Я пытался сохранить диапазон данных [i], используя getRange (), но он не позволил мне это сделать.Если я смогу получить этот диапазон, то я знаю, что смогу использовать range.setValue ('Closed'), но немного застрял на данный момент.Я знаю, что делаю что-то очень простое, очень неправильное, но любая помощь будет отличной.

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Попробуйте:

function onEdit(e) {
  var sheet = e.range.getSheet();
  var editedCell=sheet.getRange(e.range.getRow(),e.range.getColumn()).getA1Notation();
  var data = sheet.getDataRange().getValues();
  var found=false;
  var foundA=[];
  for(var i=0;i<data.length;i++) {

    if(data[i][2] == 'c') {
      found=true;
      foundA.push(i+1);
    }
  }
  if(found){
    Logger.log('Matches found in following rows of column C: %s\nCell Edited was: %s',foundA.join(','),editedCell);
  }else{
    Logger.log('No matches found');
  }

}

В целях тестирования вы можете использовать SpreadsheetApp.getUi().alert(Logger.getLog()); для отображения результатов Logger.

0 голосов
/ 29 ноября 2018

Ключевые точки:

  • getValues возвращает двумерный массив, упорядоченный по строкам, а затем по столбцам.Вы получаете доступ к одномерному массиву с data[i]
  • i индекс массива + начальная строка равна текущей строке в цикле.

Фрагмент кода (медленно):

if(data[i][0] == closed) { //2D
 sheet.getRange('CA'+(12+i)).setValue('Closed');
}
  • Но вышеупомянутое медленно, потому что мы вызываем setValue () для каждого истинного условия.Лучше всего использовать массивы.

Фрагмент кода (быстрый 70x):

var rng =sheet.getRange('CA12:CA15');
var data = rng.getValues();
var output = data.map(function(e) { return e[0] == closed ? ['Closed'] : e });
rng.setValues(output); //Single call
  • Самым быстрым способом является поиск и замена из пользовательского интерфейса листов или API

Основные чтения:

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