gpt4 book ai didi

javascript - 如何使用 Google Apps 脚本删除与 Google 表格中的条件匹配的所有行?

转载 作者:行者123 更新时间:2023-11-29 23:52:36 26 4
gpt4 key购买 nike

我正在使用 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);
}

我确定解决方案非常简单,但我已经苦苦思索了好几个小时,还是想不通!

最佳答案

使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com