0

我需要遍歷表中的所有行/列,並刪除包含特定單詞的行。理想情況下,我會使用正則表達式搜索表單,但只要找到一個字符串就可以幫助我移動。我在堆棧溢出中看到很多關於查找和刪除空行的帖子,但是找不到關於搜索整個工作表和刪除行的任何信息(如果找到的話)。Google Spreadsheets腳本刪除任何找到字符串的行

這是我到目前爲止有:

/* Delete rows */ 
function deleteRows() { 
    var sheet = SpreadsheetApp.getActiveSpreadsheet(); 
    var rows = sheet.getDataRange(); 
    var numRows = rows.getNumRows(); 
    var values = rows.getValues(); 

    var deleted = 0; // Counter (don't need if we loop backwards) 
    var regExp = new RegExp('word'); 

    for (var row = 0; row < values.length; row++) { 
    var regExpMatch = values[row][1].match(regExp); 
    if (regExpMatch.length > 0) { 
     sheet.deleteRow(row + 1 - deleted); 
     deleted++; 
    } 
    } 
    SpreadsheetApp.flush(); 
}; 

然而,這只是搜索列B,並拋出一個錯誤「類型錯誤:無法讀取零屬性‘長度’」即使存在「詞」我的電子表格中的B列。如果我喜歡一個簡單的版本:

/* Delete rows */ 
function deleteRows() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var rows = sheet.getDataRange(); 
    var numRows = rows.getNumRows(); 
    var values = rows.getValues(); 

    var deleted = 0; // Counter (don't need if we loop backwards) 

    for (var row = 0; row < values.length; row++) { 
    if (values[row][1].search("WordThatExistsInOneRow")) { 
     sheet.deleteRow(row); 
     deleted++; 
    } 
    } 
    SpreadsheetApp.flush(); 
}; 

它開始刪除每一行,即使「WordThatExistsInOneRow」僅在1行顯示了。

回答

2

你還沒有寫你的循環邏輯正確,你需要循環的每一行,然後每列該行中,然後分配必須以相反的順序進行刪除行索引。試試這個:

/* Delete rows */ 
function deleteRows() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var rows = sheet.getDataRange(); 
    var numRows = rows.getNumRows(); 
    var values = rows.getValues(); 

    var toDelete = []; 

    for (var row = 0; row < values.length; row++) { 
    for(var column = 0;column<values[row].length;column++){ 
     if (values[row][column].indexOf("WordThatExistsInOneRow") > -1){ 
     toDelete.push(row); 
     } 
    } 
    } 

    for(var deleteRow = toDelete.length-1; deleteRow >= 0;deleteRow--){ 
    sheet.deleteRow(toDelete[deleteRow]+1); 
    } 

    SpreadsheetApp.flush(); 
}; 
+0

我認爲這確實工作!然而,對於IF聲明,我無法得到一個正則表達式在那裏工作。我最終這樣做了;你認爲這是在那裏測試RegEx的最佳解決方案嗎? (在這個例子中,我會找到以大寫'A'結尾的所有單元格): var re = new RegExp('A $','gi'); (var column = 0; column Keith 2015-02-18 01:58:02

+0

^^對不起,我試圖讓代碼看起來更好,但無法弄清楚如何在註釋中創建新的行/縮進 – Keith 2015-02-18 02:03:41

+0

你不能在評論中傷心地,是的,這將是一個一個'regexp.test()'的好地方 – 2015-02-18 09:15:14