1

我正在使用Google表格和應用程序腳本處理一個簡單的電子郵件管理系統,但我是Javascript/Google Apps腳本的新手,我一直在這個問題上停留了很多時間。如何使用Google Apps腳本刪除Google表格中符合條件的所有行?

所以,我有觸點的電子表格,列出他們的姓名,電子郵件和羣,看起來像這樣:

| Name | Email    | Group | 
|-------|-------------------|--------| 
| John | [email protected] | A  | 
| Bill | [email protected] | A  | 
| Janet | [email protected] | B  | 
| Mary | [email protected] | B  | 
| Mary | [email protected] | Delete | 
| Bill | [email protected] | Delete | 
| Janet | [email protected] | A  | 

我試圖寫一個腳本編程發現標有「所有的電子郵件刪除「並刪除包含這些電子郵件的所有行。在這種情況下,我需要刪除包含[email protected][email protected]的所有行,並保留John和Janet。預期成果:

| Name | Email    | Group | 
|-------|-------------------|--------| 
| John | [email protected] | A  | 
| Janet | [email protected] | B  | 
| Janet | [email protected] | 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); 
} 

我敢肯定,解決辦法很瑣碎,但我一直在敲打我的頭幾個小時,我無法弄清楚這個!

回答

0

如何使用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); 
    } 
+0

非常感謝!我已經修改了你的版本,現在它完美地工作了! –

+0

不要忘記將它標記爲已回答,因爲它的工作。請點擊灰色複選標記 – noogui

+0

請記住,此解決方案涉及每個將被刪除的行的api調用。如果您有一張具有10萬條記錄的工作表,這可能不是最佳解決方案。 –

相關問題