Javascript 如何使用Google Apps脚本删除Google工作表中与条件匹配的所有行?
我正在使用Google表单、表单和应用程序脚本开发一个简单的电子邮件管理系统,但我对Javascript/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 |
| 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);
}