簡體   English   中英

不區分大小寫的刪除具有特定數據的行

[英]Non case sensitive remove row with specific data

我有這個 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?

解釋:

  • 您需要將row數組中的每個元素轉換為小寫。 為此,您需要使用map()toLowerCase() 通過這種方式,您將應用toLowerCaserow每個元素。 修改將在這里:

     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開始。 即, 0A列, 1B列等。


解決方案:

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;         
      }
    } 
  } 
};

已經提供的解決方案的替代方案

您可以簡單地使用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變量來指示是否已找到該單詞。

參考

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM