Javascript 如何使用Google Apps脚本删除Google工作表中与条件匹配的所有行?

Javascript 如何使用Google Apps脚本删除Google工作表中与条件匹配的所有行?,javascript,arrays,multidimensional-array,google-apps-script,google-sheets,Javascript,Arrays,Multidimensional Array,Google Apps Script,Google Sheets,我正在使用Google表单、表单和应用程序脚本开发一个简单的电子邮件管理系统,但我对Javascript/Google应用程序脚本还不熟悉,我已经在这个问题上纠缠了很久了 所以,我有一个联系人电子表格,列出了他们的姓名、电子邮件和群组,如下所示: | Name | Email | Group | |-------|-------------------|--------| | John | john@example.com | A | | Bill |

我正在使用Google表单、表单和应用程序脚本开发一个简单的电子邮件管理系统,但我对Javascript/Google应用程序脚本还不熟悉,我已经在这个问题上纠缠了很久了

所以,我有一个联系人电子表格,列出了他们的姓名、电子邮件和群组,如下所示:

| Name  | Email             | Group  |
|-------|-------------------|--------|
| John  | john@example.com  | A      |
| Bill  | bill@example.com  | A      |
| Janet | janet@example.com | B      |
| Mary  | mary@example.com  | B      |
| Mary  | mary@example.com  | Delete |
| Bill  | bill@example.com  | Delete |
| Janet | janet@example.com | A      |
我试图编写一个脚本,以编程方式查找标记为“删除”的所有电子邮件,并删除包含这些电子邮件的所有行。在这种情况下,我需要消除所有包含mary@example.com及 bill@example.com留下约翰和珍妮特。预期产出:

| Name  | Email             | Group  |
|-------|-------------------|--------|
| John  | john@example.com  | A      |
| Janet | janet@example.com | B      |
| Janet | janet@example.com | A      |
问题是我找不到一种方法以这种方式过滤我的工作表,我的脚本不断复制所有内容,包括我想删除的行。这是我到目前为止写的代码:

function removeDelRows() {

    var ss = SpreadsheetApp.getActiveSheet(); // Gets active sheet
    var data = ss.getDataRange().getValues(); // Get values in active sheet

    var toDelete = new Array();
    var newData = new Array();

    // Put in toDelete array all emails marked as "Delete"
    for (var i = 0; i < data.length; i++) {
        if (data[i][2] == "Delete") {
            toDelete.push(data[i][1]);
        }
    }
    // !BUGGY!
    // Find all rows that contains emails to be deleted and remove them 
    for (var j = 0; j < data.length; j++) {
        for (var k = 0; k < toDelete.length; k++) {
            if(data[j][1] == toDelete[k]){} // Do nothing
            else{
                newData.push(data[j]); // THIS CONDITION IS NOT BEHAVING AS EXPECTED; NEWDATA IS A COPY OF DATA
            }
        }
    }
  Logger.log(newData); // newData should contains only rows that do not match toDelete ones

  // Delete everything else
    sheet.clearContents();
    sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData); 
}
函数removeDelRows(){
var ss=SpreadsheetApp.getActiveSheet();//获取活动工作表
var data=ss.getDataRange().getValues();//获取活动工作表中的值
var toDelete=新数组();
var newData=newarray();
//将标记为“删除”的所有电子邮件放入toDelete数组
对于(变量i=0;i
我相信这个解决方案是非常琐碎的,但我已经连续数小时绞尽脑汁了,我无法解决这个问题

使用deleteRow()怎么样


非常感谢你!我对你的版本做了一点修改,现在它工作得很好!别忘了将它标记为已回答,因为它正在工作。单击灰色复选标记请记住,此解决方案涉及对要删除的每一行的api调用。如果您有一张包含10条数千条记录的工作表,那么这可能不是最好的解决方案。
    var ss = SpreadsheetApp.getActiveSheet(); // Gets active sheet
    var data = ss.getDataRange().getValues(); // Get values in active sheet

    nextLine: for( var i = data.length-1; i >=0; i-- ) { 
      if( data[i][2] !== "Delete" ) continue nextLine;
      ss.deleteRow(i+1);
    }