2016-01-29 47 views
1

我試圖讓谷歌片隱藏或刪除有個約會在其中超過1周齡行的日期。谷歌牀單 - 明確與日期單元都排有年長超過一週

這是我已經成功地拼湊。

function ClearOld() { 
    var ssActive = SpreadsheetApp.getActiveSpreadsheet(); 
     SpreadsheetApp.setActiveSheet(getSheetByName('Done')) 

    var MyRange = ssActive.getRange("C:C");//selects C column 
    var WeekAgo = new Date(date.getTime()-7*(24*3600*1000)); 
    for(i = 0; i < MyRange.length; i++) { 
     if(MyRange[i].getTime()<WeekAgo){ 
      getActiveSheet().deleteRow(i); 
     } 
    } 
} 
+0

閱讀[故障排除指南(https://developers.google.com/apps-script/troubleshooting)添加'Logger.log( 'WeekAgo:' + WeekAgo);'語句'WeekAgo'行之後。運行代碼,然後在VIEW菜單中選擇LOGS。對MyRange [i] .getTime()'做同樣的操作。日誌在打印中有什麼? –

+0

你需要像這樣設置活動SS:'var ss = SreadsheetApp.getActiveSpreadsheet(); ss.setActiveSheet(ss.getSheetByName(「Done」));' –

回答

0

下面是一些代碼,我想會做你想要什麼:

function ClearOld() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sh = ss.getSheetByName('Done'); 

    SpreadsheetApp.setActiveSheet(sh); 

    var MyRange = sh.getRange(1,3,sh.getLastRow(),1);//selects C column 
    var dataInColumnC = MyRange.getValues(); 
    //Logger.log('dataInColumnC: ' + dataInColumnC); 

    var todaysDate = new Date(); 
    var todayAsMilliseconds = todaysDate.getTime(); 
    Logger.log('todayAsMilliseconds: ' + todayAsMilliseconds); 

    var WeekAgo = todayAsMilliseconds - (7*(24*3600*1000)); 
    Logger.log('WeekAgo: ' + WeekAgo); 

    var valueInCell, 
     dateInCell, 
     lengthOfData = dataInColumnC.length; 

    for (var i=lengthOfData; i > 0; i-=1) { //decrement count 
    if (dataInColumnC[i-1] === undefined) {continue}; 
    valueInCell = dataInColumnC[i-1][0]; 
    if (valueInCell === undefined || valueInCell === "") {continue}; 

    Logger.log('valueInCell: ' + valueInCell); 
    Logger.log('typeof valueInCell: ' + typeof valueInCell); 

    dateInCell = valueInCell.getTime(); 
    Logger.log('dateInCell: ' + dateInCell); 

    if(dateInCell < WeekAgo){ 
     Logger.log('Row - ' + i + ' Is more than a week old'); 
     sh.deleteRow(i); 
    }; 
    }; 
}; 

我測試過它,和它的作品。我避免使用ssActive.getRange("C:C");,因爲它可以獲得許多空行數據。您必須從下向上刪除行。如果從頂部刪除行,則刪除第一行後,數組中的數據和電子表格中的行將不同步。

相關問題