Цикл строк, проверьте, если 2 ячейки равны значению, затем измените значение ячейки - PullRequest
0 голосов
/ 14 мая 2019

Я хочу проверить, имеет ли столбец 2 значение 'foo', а столбец 28 имеет значение 'bar', и если true, тогда значение в столбце 2 будет равно 'fizz'.

Эточто у меня так далеко.Я думал, что правильно проверяю значения, но, возможно, я неправильно устанавливаю значение fizz.

function functionName() {
   var sheet = SpreadsheetApp.getActive().getSheetByName('sheetname');

  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();

  for (var i = 2; i <= numRows - 1; i++) {
    var row = values[i];
    if (row[2] == 'foo' && row[28] == 'bar'){
      row[2] == 'fizz';
    }
  }
}

1 Ответ

1 голос
/ 14 мая 2019

Если foo и bar, то fizz

function functionName() {
  var ss=SpreadsheetApp.getActive();//typically I find it more useful not to chain too much in the beginning so that you can reuse these assignments later.
  var sh=ss.getActiveSheet();
  var rg2=sh.getRange(2,2,sh.getLastRow()-1,1);//since you began your loop at two I assume you have a header so rows will be one less than getLastRow() to make up for the header
  var vA2=rg2.getValues();
  var rg28=sh.getRange(2,28,sh.getLastRow()-1,1);//You could use getDataRange but then you'd have to reload the whole sheet rather that just one column which could be a  problem if you have formulas in your sheet.
  var vA28=rg28.getValues();
  for(var i=0;i<vA2.length;i++) {
    if(vA2[i][0]=='foo' && vA28[i][0]=='bar')  {
      vA2[i][0]='fizz';
    }
  }
  rg2.setValues(vA2);//Dont forget this.  Its what actually loads the data into the spreadsheet.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...