使用google应用程序脚本

时间:2017-09-22 17:40:46

标签: arrays google-apps-script

我有一个大型电子表格和一组禁止的单词,我想删除包含任何列中任何单词的所有行。我已经在单词中实现了for循环,我想为每个单词获得所有匹配的行。目前,我正在使用2D ArrayLibIndexOf函数,它为我提供了第一行,其中任何列中都有该单词。我的问题是脚本超出了执行时间,所以我试图尽可能地优化它。

到目前为止,我已经使用我的脚本发布了一个测试示例,跳过了部分,我将电子表格数据放入array,然后将过滤后的数组写入电子表格。

如果查看下面的代码,while循环会逐个删除与一个单词匹配的所有行。 对我来说,如果我可以替换while循环就足够了......我可以处理超过执行时间。

function test(){
  var filters = []; 
  filter[0]='bye'
  filter[1]='hello';
  filter[3]='DOg';
  var array = [];
  array[0]=['hello todayis friday','and is cold'];
  array[1]=['not tomorrow','neverland'];
  array[2]=['anuthing','and bye'];
  array[3]=['what asdas','bye dog'];
  array[4]=['jejejje','the dog died'];
  array[5]=['lastone','bye'];
  var fil_array = array;   
  Logger.log(fil_array);  
  for (var i=0;i<filtro.length;i++){        
    var ind = ArrayLib.indexOf(fil_array, -1, filter[i]);
    while (ind>=0){      
      Logger.log(ind);
      fil_array.splice(ind,1);
      var ind = ArrayLib.indexOf(fil_array, -1, filter[i]);         
    }  
  }
  Logger.log(fil_array);
}

1 个答案:

答案 0 :(得分:0)

这将为您提供要删除的行的索引。

function eliminateUnwantedWords()
{
  var uA=['bye','hello','DOg'];
  var sA=[['hello today is friday','and is cold'],['not tomorrow','neverland'],['anuthing','and bye'],['what asdas','bye dog'],['jejejje','the dog died'],['lastone','bye']];
  var rA=[];

  for (var i=0;i<sA.length;i++)
  {        
    var row=sA[i];
    for(var j=0;j<row.length;j++)
    {
        var wA=row[j].split(/\s+/);
        for(var k=0;k<wA.length;k++)
        {
          if(uA.indexOf(wA[k])>-1)
          {
            rA.push(i);
            break;
          }
        }
    }

  }
  var ui=HtmlService.createHtmlOutput(rA.join(','));
  SpreadsheetApp.getUi().showModelessDialog(ui, 'Indices of Rows to remove.')
}

这是我的输出:

enter image description here

如果您要从电子表格中删除行,我建议您从底部开始,然后重新开始。