Сценарий Google Apps indexOf - PullRequest
       0

Сценарий Google Apps indexOf

0 голосов
/ 17 января 2020

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

function Add_Label(){

  var ss = SpreadsheetApp.getActive();
  var s = ss.getSheetByName('test')
  var lr = s.getLastRow();

var range = s.getRange("A:A");
// var values = range.getValues().toString().toLowerCase();
 // Logger.log(values);


  for(var i=1;i<=lr;i++){


  var somecell = s.getRange(i, 1).getValue().toString().toLowerCase();


    if (somecell == 'vip') {
    s.getRange(i,2).setValue('VIP');
    } else if 
    (somecell == 'decom') {
    s.getRange(i,2).setValue('Decomission');
    } else if 
    (somecell == 'cert') {
    s.getRange(i,2).setValue('Certificate');
    } 

}
}

Редактировать: 20 января

Сегодня я немного поиграл / выучил и сумел заставить работать следующий код, однако это мучительно медленно и часто падает / перерыв. Я считаю, что мне нужно что-то вроде того, чтобы не получать значения ячеек при каждой итерации, и вместо этого использовать массив, но я признаю, что немного растерялся в том, как этого добиться.

  function Add_Labels_new(){

  var ss = SpreadsheetApp.getActive();
  var s = ss.getSheetByName('test')
  var lr = s.getLastRow();
  var range = ss.getRange('C1:C').getValues();

  Logger.log(lr);

 for(var i=1;i<=lr;i++){


var somecell = s.getRange(i, 3).getValue().toString().toLowerCase();


if (range[i][0].indexOf('new') != -1 && somecell.indexOf('vip') != -1 || 
   somecell.indexOf('vm') != -1)   {
s.getRange(i,12).setValue('VIP/VM');
} else if 
(range[i][0].indexOf('decom') != -1) {
s.getRange(i,12).setValue('Decom');
} else if 
(range[i][0].indexOf('cert') != -1) {
s.getRange(i,12).setValue('Cert');
} else if 
(range[i][0].indexOf('alert') != -1) {
s.getRange(i,12).setValue('Alert');
} else
  (s.getRange(i,12).setValue(issuetype));


   }
}

Ответы [ 2 ]

1 голос
/ 18 января 2020
function Add_Label(){
  var ss=SpreadsheetApp.getActive();
  var s=ss.getSheetByName('test');
  var v=s.getRange(1,1,s.getLastRow(),2).getValues();
  for(var i=0;i<v.length;i++) {
    var s=v[i][0].toString().toLowerCase();
    v[i][1]=(s=='vip')?'VIP':v[i][1];
    v[i][1]=(s=='decom')?'Decomission':v[i][1];
    v[i][1]=(s=='cert')?'Certificate':v[i][1];
  }
  s.getRange(1,1,v.length,v[0].length).setValues(v);
}

троичный оператор

0 голосов
/ 21 января 2020

Наконец удалось решить эту проблему с помощью трюка Саймона Бирта, упомянутого в комментариях к этой теме: Определение последней строки в одном столбце

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

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