Оптимизировать скрипт Google Apps, который ищет столбец для поиска нескольких подстрок - PullRequest
0 голосов
/ 18 декабря 2018

Недавно я написал код сценариев Служб Google, который выполняет поиск в каждой ячейке столбца, чтобы проверить наличие нескольких подстрок в одной основной строке.К сожалению, есть около 21000 основных строк, которые он должен искать, что занимает так много времени, что время от времени заканчивается.Я не опытный программист, поэтому мне было интересно, использовал ли я лучшие практики при написании этого кода, или есть ли способ, которым я могу оптимизировать его.

function allNames(setOfStrings, mainString){
  var i = 0;
  var bool = "true";
  while(i < setOfStrings.length && bool == "true"){
    var indexCheck = mainString.indexOf(setOfStrings[i]);
    if(indexCheck > -1){
    var bool = "true";
    }
    else{
    var bool = "false";
    }
    i++;
 }
  return bool;
}

Проверяет строку и возвращает true, если всев нем содержатся подстроки

function previewPlacements(){
      var ss = SpreadsheetApp.openById("1f1vGK88OeUcfAEVQ0R06LLa8iq1- 
    99_KFyaxsyU4aRs");
      var add = ss.getSheetByName("Add Placements");
      var ps = ss.getSheetByName("Placement Import");
      var rowNum = 2;  
      var codes = add.getRange(["E1:G1"]).getValues().join().split(',');
      var plCountCell = ps.getRange("I1").getValue();
      var contains = "";
      for(i = 0; i < 4000; i++){
        var ct = getFirstEmptyRowPlacement();
        var placement = ps.getRange(rowNum + i, 1).getValue();
        var addRange = add.getRange(ct + 10, 3);
        var contains = allNames(codes, placement);
        if(contains == "true") {addRange.setValue(placement);                      
                       }
      }
      Logger.log(plCountCell)
    }

Если из первой функции возвращается значение true, это печатает его в следующей пустой ячейке определенного диапазона.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 20 декабря 2018

Попробуйте:

function allNames(setOfStrings,mainString){
  var rv=true;
  for(var i=0;i<setOfStrings.length;i++){
    if(mainString.indexOf(setOfStrings[i])==-1){
      rv=false;
      break;
    }
  }
  return rv;
}

function previewPlacements(){
  var ss=SpreadsheetApp.openById("1f1vGK88OeUcfAEVQ0R06LLa8iq1-99_KFyaxsyU4aRs");
  var add=ss.getSheetByName("Add Placements");
  var ps=ss.getSheetByName("Placement Import");
  var rowNum=2;  
  var codes=add.getRange(["E1:G1"]).getValues()[0];
  var plCountCell=ps.getRange("I1").getValue();
  for(var i=0;i<4000;i++){//Why 4000?
    var ct=getFirstEmptyRowPlacement();
    var placement=ps.getRange(rowNum + i, 1).getValue();
    var addRange=add.getRange(ct + 10, 3);
    var contains=allNames(codes, placement);
    if(contains==true){addRange.setValue(placement);}
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...