删除包含数组或第二个电子表格值的Google表格中的行

时间:2017-07-07 21:46:57

标签: google-apps-script

我正在尝试创建一个脚本,允许我删除包含特定文本值的Google电子表格中的行。我是一个非常新手编码器,并尝试修改我发现的几个类似的脚本。我唯一可以上班的是以下内容。但是,我的值列表将很长,可能有数百个术语,而我在这里使用的脚本将很难构建这么多值。我猜测在数组或第二个电子表格中使用值会好得多。它也区分大小写。我尝试从其他脚本中提升代码以更改为全部小写但我无法正常工作。

如果您愿意分享您的集体知识,我该如何修改以实现我的目标?

    function readRows() {
 var sheet = SpreadsheetApp.getActiveSheet();
 var rows = sheet.getDataRange();
 var numRows = rows.getNumRows();
 var values = rows.getValues();

 var rowsDeleted = 0;
 for (var i = 0; i <= numRows - 1; i++) {

 var row = values[i];

   if (row[1].indexOf("test") > -1) {
 sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
 rowsDeleted++;
 }

 if (row[1].indexOf("TEST") > -1) {
 sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
 rowsDeleted++;
 }

 }
};

1 个答案:

答案 0 :(得分:1)

试试这个。如果你删除行,最好从底部开始,否则它会与你的索引混淆。 DelA是您希望基于行删除的字符串数组。 indexOf函数返回一些&gt; -1如果找到其中一个字符串。一旦找到它,它会在删除它后停在该行上并向上移动一行。行号是i + 1.我没想到你有一个标题行。如果您有标题行,请将停止条件调整为i&gt; 0

function deleteMyRows() 
{
 var delA=['Test','Others'];
 var sht = SpreadsheetApp.getActiveSheet();
 var rng = sht.getDataRange();
 var values = rng.getValues();
 for (var i = values.length-1; i > -1; i--) 
 {
   for(var j=0;j<values[i].length;j++)
   {
     for(var k=0;k<delA.length;k++)
     {
       if(values[i][j].indexOf(delA[k])>-1)
       {
         sht.deleteRow(i + 1);
         break;
       }
     }
   }
 }
}

所以也许这就是你真正需要的东西:

 function deleteMyRows() 
{
 var delA=['Test','Others'];
 var sht = SpreadsheetApp.getActiveSheet();
 var rng = sht.getDataRange();
 var values = rng.getValues();
 for (var i = values.length-1; i > -1; i--) 
 {
   for(var j=0;j<values[i].length;j++)
   {
     for(var k=0;k<delA.length;k++)
     {
       var lcval=String(values[i][j]).toLowerCase();
       var lcdel=String(delA[k]).toLowerCase();
       if(lcval.indexOf(lcdel)>-1)
       {
         sht.deleteRow(i + 1);
         break;
       }
     }
   }
 }
}