2

我想删除 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”可能只是该列中副本的一部分。例如,有人可能会填写“联系我们”表格并在评论部分寻求有关其登录信息的帮助 - 但这不是我的目的的合格潜在客户。他们的消息可能是“嘿,你能帮我登录吗?” 或其他一些类似的措辞,这就是为什么我要删除任何包含“登录”的行的任何容量。

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

4

2 回答 2

1

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

此功能可让您实现以下目标,

  • 识别任意数量的域(在badDomains数组中)以删除其对应的行。
  • 识别任意数量的单词(在badWords数组中)以删除其对应的行。
  • 上述两个搜索条件均不区分大小写;您可以通过将正则表达式修饰符(存储在 中regExpModifiers)更改为""or来更改它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++;
      };
  };
}
于 2018-07-07T03:19:58.640 回答
0

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

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

}
于 2018-07-07T01:11:55.840 回答