2017-08-03 95 views
1

我希望你能幫我解決一個問題。Google sheet從filterArray排除行

我有一個代碼是基於10列中的時間將行從1選項卡複製到另一個。我從這裏得到了代碼,並將其修改爲我的需要。作爲此代碼的一部分,我有第二個選項卡,其中只需刪除相同的行即可獲得類似的信息。但是,當它從第二個選項卡開始並指出「無法在對象中找到函數getTime ...」時,我收到一條錯誤消息。我猜這是由於我的標題欄沒有時間在第10列。有什麼辦法可以從filterarray中排除行嗎?

function moveRows() { 

    var ss = SpreadsheetApp.getActive(); 
    var s = ss.getSheetByName("Today"); 
    var sr = ss.getSheetByName("Request History"); 
    var target = ss.getSheetByName("Archive"); 
    var today = new Date().getTime() 
    var val = filterArray(s.getDataRange() 
     .getValues()); 
    for (var len = val.length - 1, i = len; i >= 3; i--) { 
     if (val[i][10].getTime() < today) { 
      target.appendRow(val[i]) 
      s.deleteRow(i + 1) 
     } 
    } 
    var val = filterArray(sr.getDataRange() 
     .getValues()); 
    for (var len = val.length - 1, i = len; i >= 0; i--) { 
     if (val[i][10].getTime() < today) { 
      sr.deleteRow(i + 1) 
     } 
    } 
} 

function filterArray(array) { 
    var filteredArray = []; 
    array.forEach(function (r) { 
     if (r[10] !== '') { 
      filteredArray.push(r); 
     } 
    }); 
    return filteredArray; 

    var cell = s.getRange("A2:A2"); 
    cell.setFormula("=query('Request History'!A:F)"); 
} 

任何援助將不勝感激。我不是一個編碼員,但通常會在玩弄它時嘗試更改代碼以適應我的需要。

感謝, Sjoerd

回答

1

如果你的目標是根本沒有腳本崩潰或刪除行時的日期/時間值不存在,你可以「捕獲」了異常(錯誤)您收到,在這種情況下,腳本會在收到此錯誤後轉到下一行。

這比改變「filterArray」以跳過一個標籤的標題行而不是另一個標籤行更簡單。

for (var len = val.length - 1, i = len; i >= 0; i--) { 
    try{ 
     if (val[i][10].getTime() < today) { 
      sr.deleteRow(i + 1) 
     } 
    }catch(error){ 
     Logger.log('Caught an error processing item '+i+': '+error); 
    } 
} 

見的try/catch文檔瀏覽: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch

+0

這工作。非常感謝您的幫助。 – Sjoerd

+0

不客氣,很高興幫助!請「接受」我的回答,以便問題顯示已解決 –