我正在使用 Google 表格、表单和 Apps 脚本开发一个简单的电子邮件管理系统,但我对 Javascript/Google Apps 脚本还不熟悉,而且我已经在这个问题上困扰了很长时间了。
所以,我有一个包含联系人的电子表格,列出了他们的姓名、电子邮件和群组,如下所示:
| Name | Email | Group |
|-------|-------------------|--------|
| John | <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="72181d1a1c32170a131f021e175c111d1f" rel="noreferrer noopener nofollow">[email protected]</a> | A |
| Bill | <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="90f2f9fcfcd0f5e8f1fde0fcf5bef3fffd" rel="noreferrer noopener nofollow">[email protected]</a> | A |
| Janet | <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="016b606f6475416479606c716d642f626e6c" rel="noreferrer noopener nofollow">[email protected]</a> | B |
| Mary | <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4a272b38330a2f322b273a262f64292527" rel="noreferrer noopener nofollow">[email protected]</a> | B |
| Mary | <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e08d819299a08598818d908c85ce838f8d" rel="noreferrer noopener nofollow">[email protected]</a> | Delete |
| Bill | <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7f1d1613133f1a071e120f131a511c1012" rel="noreferrer noopener nofollow">[email protected]</a> | Delete |
| Janet | <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5b313a353e2f1b3e233a362b373e75383436" rel="noreferrer noopener nofollow">[email protected]</a> | A |
我正在尝试编写一个脚本,以编程方式查找所有标记为“删除”的电子邮件,并删除包含这些电子邮件的所有行。在这种情况下,我需要消除包含 [email protected] 的所有行和 [email protected]并保留约翰和珍妮特。预期输出:
| Name | Email | Group |
|-------|-------------------|--------|
| John | <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="83e9ecebedc3e6fbe2eef3efe6ade0ecee" rel="noreferrer noopener nofollow">[email protected]</a> | A |
| Janet | <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d6bcb7b8b3a296b3aeb7bba6bab3f8b5b9bb" rel="noreferrer noopener nofollow">[email protected]</a> | B |
| Janet | <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a4cec5cac1d0e4c1dcc5c9d4c8c18ac7cbc9" rel="noreferrer noopener nofollow">[email protected]</a> | 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);
}
我确信解决方案非常简单,但我已经绞尽脑汁了几个小时,但我无法弄清楚这一点!
最佳答案
使用deleteRow()怎么样?
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);
}
关于javascript - 如何使用 Google Apps 脚本删除与 Google 表格中的条件匹配的所有行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42530238/