我有一个大型电子表格和一组禁止的单词,我想删除包含任何列中任何单词的所有行。我已经在单词中实现了for循环,我想为每个单词获得所有匹配的行。目前,我正在使用2D ArrayLib和IndexOf
函数,它为我提供了第一行,其中任何列中都有该单词。我的问题是脚本超出了执行时间,所以我试图尽可能地优化它。
到目前为止,我已经使用我的脚本发布了一个测试示例,跳过了部分,我将电子表格数据放入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);
}
答案 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.')
}
这是我的输出:
如果您要从电子表格中删除行,我建议您从底部开始,然后重新开始。