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

时间:2018-07-06 16:18:13

标签: google-apps-script google-sheets google-sheets-macros

我想删除Google表格上包含员工,测试,不相关的提交和重复条目的行。 我的代码必须独立,以便可以在我的工作场所中使用。

具体来说,我想:

  • 删除所有包含属于某个组织的电子邮件地址的行(例如:以@ domainname.com结尾的任何电子邮件地址)。我一直在使用一段代码删除包含属于我的同事的三个特定电子邮件地址的行,但是我希望找到一种方法来一次删除所有员工,而无需在每个电子邮件中都进行编码。这是我一直在使用的代码:

    function delVtlEm() {
        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] == 'isaac@domainname.com' || 
                row[1] == 'danni@domainname.com' || 
                row[1] == 'georgia@domainname.com') {
    
                sheet.deleteRow((parseInt(i) + 1) - rowsDeleted); 
                rowsDeleted++;
            }
        }
    }
    
  • 从注释部分删除所有包含“ login”一词的行,其中“ login”可能只是该列中副本的一部分。例如,某人可能会填写“联系我们”表单,并在评论部分询问有关其登录信息的帮助-但这并不是我的合格潜在客户。他们的信息可能是“嘿,您能帮我登录吗?”或其他类似的措词,这就是为什么我要删除任何容量的包含“登录”的行。

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

2 个答案:

答案 0 :(得分:1)

我已经根据您的代码实现了以下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++;
      };
  };
}

答案 1 :(得分:0)

您可以使用@property查找部分字符串。另外,请勿单独删除工作表中的行。那是低效的。从数组中删除元素(行),清除工作表选项卡,然后设置所有新值。

indexOf('what to find')