2015-04-22 97 views
0

我正在處理一個腳本以從電子表格中存檔(複製和刪除)行。跨非連續行的批行刪除

要做到這一點,我通過每一行去工作表,看看它是否完成。

我可以批量通過收集了所有的行和寫入的值的範圍內的所有在結束所述第一複製過程。

然而,當談到時間刪除行,我還是要循環併爲每一行調用sheet.deleteRow()一次。我不能使用sheet.deleteRows(),因爲行不連續。

這裏是我試圖使用腳本方式的一例:

function archiveRows_(archiveSheet, sheetID) { 

    // get req values 
    var reqSpreadSheet = SpreadsheetApp.openById(sheetID); 
    var reqSheet = reqSpreadSheet.getSheetByName("Mstr_Wrkbk"); 
    var currentValues = reqSheet.getDataRange().getValues(); 

    // container for staged data 
    var rowsToArchive = []; 
    var rowsToDelete = []; 

    // check for archivable content 
    var currentRows = currentValues.length; 
    for (i = 0; i < currentRows - 1; i++) { 
    var row = currentValues[i] 

    // check if we meet the criteria for archival 
    if (shouldArchive_(row)) { 
     // add row to archive list 
     rowsToArchive.push(row); 
     rowsToDelete.push(i + 1); 
    } 
    } 

    // archive rows if we found some 
    var numRows = rowsToArchive.length; if (!numRows) return 0; 
    var numCols = rowsToArchive[0].length; 

    // add rows to archive sheet 
    var nextFreeRow = archiveSheet.getLastRow(); 
    archiveSheet.insertRows(nextFreeRow + 1, numRows); 

    // write archive rows 
    archiveSheet.getRange(nextFreeRow + 1,1, numRows, numCols).setValues(rowsToArchive); 

    // Committ Changes 
    SpreadsheetApp.flush(); 

    // delete original rows (we have to loop backwards so delete works) 
    for (i = rowsToDelete.length - 1; i >= 0; i--) { 
    // delete row from master sheet 
    var rowNum = rowsToDelete[i]; 
    reqSheet.deleteRow(rowNum); 
    } 

    // Committ Changes 
    SpreadsheetApp.flush(); 

    return numRows; 
} 

這是這部分是運行非常緩慢:

// delete original rows (we have to loop backwards so delete works) 
for (i = rowsToDelete.length - 1; i >= 0; i--) { 
    // delete row from master sheet 
    var rowNum = rowsToDelete[i]; 
    reqSheet.deleteRow(rowNum); 
} 

有什麼辦法來優化/批此操作?

+1

存檔行必須有一些標準。你可以使用相同的條件進行排序,然後一次刪除所有條目(也可以複製該文件),然後取消排序? –

+0

@SandyGood,很好的建議!只是更新它來使用它。 – KyleMit

+0

好的,我將添加它作爲答案。 –

回答

1

必須有歸檔行的一些標準。你可以使用相同的條件進行排序,然後一次刪除所有條目(也可以複製該文件),然後取消排序?