为了账号安全,请及时绑定邮箱和手机立即绑定

不区分大小写删除具有特定数据的行

不区分大小写删除具有特定数据的行

波斯汪 2023-07-14 10:10:24
我有这个 Google Apps 脚本,它检查特定列中列出的单词并删除与这些单词匹配的行:function sort() {   var sheet = SpreadsheetApp.getActiveSheet();   var rows = sheet.getDataRange();   var values = rows.getValues();   var rowsDeleted = 0;   var arrayOfWords = ['möbelübernahme','können übernommen werden','caravan','wohnwagen']   for (var i = values.length - 1; i >= 0; i--) {      var row = values[i];     for (var j = 0; j < arrayOfWords.length; j++) {          if (row['21','17'].indexOf(arrayOfWords[j]) > -1) {                 sheet.deleteRow(i+1);             rowsDeleted++;           break;               }    }   } };我可以检查单词不区分大小写吗?因此,如果我包含“mietwohnung”之类的单词,它将删除所有匹配选项:MIETWOHNUNG、mietwohnung、Mietwohnung?
查看完整描述

2 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

解释:

  • 您需要将row数组中的每个元素转换为小写。为此,您需要使用map()和toLowerCase()。通过这种方式,您将应用toLowerCase到 的每个元素row。修改将在这里:

    if (row.map(r=>r.toLowerCase()).indexOf(arrayOfWords[j]) > -1)
  • row['21','17']不是有效的 JavaScript 对象。你不能像那样对数组进行切片。如果您的目标是仅检查列2117然后使用此 if 语句:

    if ([row[21],row[17]].map(r=>r.toLowerCase()).indexOf(arrayOfWords[j]) > -1)

    注意这里row[21]是列V,是工作表中的row[17]列。R记住 javascript 中的索引是从 开始的0。即,0是 列A1是 列B等等。


解决方案:

function sort() { 

  var sheet = SpreadsheetApp.getActiveSheet(); 

  var rows = sheet.getDataRange(); 

  var values = rows.getValues(); 

  var rowsDeleted = 0; 

  var arrayOfWords = ['möbelübernahme','können übernommen werden','caravan','wohnwagen'] 


  for (var i = values.length - 1; i >= 0; i--) {  

    var row = values[i]; 

    for (var j = 0; j < arrayOfWords.length; j++) {    

      if (row.map(r=>r.toLowerCase()).indexOf(arrayOfWords[j]) > -1) {         

        sheet.deleteRow(i+1);     

        rowsDeleted++;   

        break;         

      }

    } 

  } 

};


查看完整回答
反对 回复 2023-07-14
?
智慧大石

TA贡献1946条经验 获得超3个赞

已提供解决方案的替代方案


您可以简单地使用toLowerCase()- 这样“Mietwohnung”将变成“mietwohnung”,并且可以毫无问题地进行比较。


因此,您可以对脚本进行以下修改:


for (let i = values.length - 1; i >= 0; i--) {

   var row = values[i];

   var found = false;

   for (let k = 0; k < row.length; k++)

      for (let j = 0; j < arrayOfWords.length; j++)

         if (row[k].toString().toLowerCase().indexOf(arrayOfWords[j]) > -1)

            found = true;

   if (found == true) {

      sheet.deleteRow(i + 1);

      rowsDeleted++;

   }

}


上面的脚本循环遍历数据范围中的所有值,因此添加了另一个循环,然后使用该函数toLowerCase()检查该值是否是arrayOfWords数组的一部分,如果需要,则删除行。这里使用该found变量来指示该单词是否已找到。


查看完整回答
反对 回复 2023-07-14
  • 2 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信