Google 用于删除包含部分关键字的行的 Apps 脚本

Google Apps Script for Removing Rows Containing Part of a Keyword

我想删除 Google 工作表中包含员工、测试、不相关提交和重复条目的行。 我的代码需要是独立的,这样才能在我的工作场所使用。

具体来说,我想:

如果您有任何想法或建议的代码,请告诉我!

您可以使用 indexOf('what to find') 来查找部分字符串。另外,不要单独删除 Sheet 中的行。那是低效的。从数组中删除元素(行),清除 sheet 选项卡,然后设置所有新值。

function delVtlEm() {
  var i,row;

  var sheet = SpreadsheetApp.getActiveSheet(); 
  var rows = sheet.getDataRange();

  var numRows = rows.getNumRows(); 
  var values = rows.getValues(); 
  var rowsDeleted = 0; 

  var arrayOfStringsToFind = ["whatToLookFor","whatToLookFor2","whatToLookFor3"];

  for (i = 0; i <= numRows - 1; i++) {
    row = values[i];

    column1Value = row[0];//Get the value of column A for this row
    column2Value = row[1];
    column3Value = row[2];

    if (arrayOfStringsToFind.indexOf('column1Value') !== -1) { 
      values.splice(i,1);//
    }

    if (column2Value.indexOf('@vtldesign.com') !== -1) { 
      values.splice(i,1);//Remove one element in the data array at index i
    }
    if (column3Value.indexOf('whatToLoookFor') !== -1) { 
      values.splice(i,1);//
    }
  }

  sheet.clearContents();//clear the contents fo the sheet
  sheet.getRange(1, 1, values.length, values[0].length);//Set new values

}

我根据您的代码实现了以下smartDelete()功能。

这个函数可以让你实现以下,

  • 识别任意数量的域(在 badDomains 数组中)以删除其对应的行。
  • 识别任意数量的单词(在badWords数组中)以删除其对应的行。
  • 以上两个搜索条件均不区分大小写;您可以通过将正则表达式修饰符(存储在 regExpModifiers 中)更改为 ""Null.
  • 来更改它
  • 可以对三个不同的列执行上述操作(存储在 fnameColumnNumberemailColumnNumbercompanyColumnNumber 中)

如果您遇到任何问题或有任何反馈,请告诉我。

function smartDelete() {
  // smartDelete settings goes here, 
  var badDomains = ["vtldesign\.com", "parterreflooring\.com"];
  var badWords = ["Vital", "Parterre", "test"];

  var fnameColumnNumber = 0;
  var emailColumnNumber = 1;
  var companyColumnNumber = 3;

  var regExpModifiers = "i";

  // Gain access data in the sheet
  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();
  var rowsDeleted = 0;
  var deleteAction = false;

  // delete procedure
  for (var i = 0; i <= numRows - 1; i++) {
      var row = values[i];
      deleteAction = false;

      // check bad words
      for (var j = 0; j <= badWords.length - 1; j++) {
          var myPattern = new RegExp(badWords[j], regExpModifiers);
          var status = row[fnameColumnNumber].toString().match(myPattern);
          if (status) {
              // match found, mark this row for delete
              deleteAction = true;
              break;
          };
      };

      // check bad domains
      for (var j = 0; j <= badDomains.length - 1; j++) {
          var myPattern = new RegExp(badDomains[j], regExpModifiers);
          var status = row[emailColumnNumber].toString().match(myPattern);
          if (status) {
              // match found, mark this row for delete
              deleteAction = true;
              break;
          };
      };

      // check bad words
      for (var j = 0; j <= badWords.length - 1; j++) {
          var myPattern = new RegExp(badWords[j], regExpModifiers);
          var status = row[companyColumnNumber].toString().match(myPattern);
          Logger.log(status)
          if (status) {
              // match found, mark this row for delete
              deleteAction = true;
              break;
          };
      };
      // execute delete.
      if (deleteAction) {
            sheet.deleteRow((parseInt(i) + 1) - rowsDeleted);
            rowsDeleted++;
      };
  };
}