【发布时间】:2017-07-20 16:37:02
【问题描述】:
我正在使用 Google 表格、表单和 Apps 脚本开发一个简单的电子邮件管理系统,但我是 Javascript/Google Apps 脚本的新手,我已经被这个问题困扰了很长时间。
所以,我有一个包含联系人的电子表格,列出了他们的姓名、电子邮件和群组,如下所示:
| 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 并保留 John 和 Janet。预期输出:
| 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);
}
我确信解决方案非常简单,但我已经数小时不停地敲打我的头,我无法弄清楚这一点!
【问题讨论】:
标签: javascript arrays multidimensional-array google-apps-script google-sheets