2017-02-07 4 views
0

this solutionが見つかりましたが、私のシート上で動作させるのに苦労しています。Google Apps Script - 1か月より古い行を非表示にする

この質問を送信したユーザーには3行のヘッダー行があり、スクリプトは4行目と4行目のみで動作するようにしていました。私は1つのヘッダを持っているので、2行目と2行目で動作するスクリプトが必要です。

私は行1だけを残していますが、行2と行3を隠すだけです。どこが間違っているのか分かりません。

function onOpen() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var menuItems=[{name: 'HideRows', functionName: 'hideRows'}]; 
    ss.addMenu('Hide Rows', menuItems);  
}; 

function hideRows() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var s = ss.getSheetByName("Responses"); 
    var v = s.getRange("B:B").getValues(); 
    var today = new Date(); 
    var m = today.getMonth(); 
    for(var i=3;i<v.length;i++) 
    if(v[i][0]=="" || v[i][0].getMonth()>=m) break; 
    if(i>1) s.hideRows(2,i-1) 
}; 

ETAは:ここに私のシート/スクリプトへのリンクです:https://docs.google.com/spreadsheets/d/1PkB1_hlJoI-iFYTAN8to_ES9R8QyUxEgPsWtSTUmj8U/edit?usp=sharing

答えて

0
function hideRows() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var s = ss.getSheetByName('Responses'); 
    // start range from B2 skipping header 
    // join() + split(',') converts 2D array into plain array 
    // filter(Boolean) skips all the blank cells in column 
    var v = s.getRange('B2:B').getValues().join().split(',').filter(Boolean); 
    // today in milliseconds for date comparison 
    var today = new Date().getTime(); 
    // one month in milliseconds 
    var oneMonth = 2629746000; 
    Logger.log(v.length); 
    for (var i=0;i<v.length;i++) { 
    // Date Object from cell in B2:B in milliseconds 
    var vDate = new Date(v[i]).getTime(); 
    // exit for loop when first date less than one month is found 
    if (today - vDate <= oneMonth) { 
     break; 
    } 
    } 
    Logger.log(i+1); 
    s.hideRows(2, i); 
} 
0

あなたのforループと同様にif文に構文エラーがあります。これらの部分で作業するコードは{}でなければなりません。あなたのロジックに誤りがあります。 2行目の10月は今月の2月よりも大きいです。だから、最初の数ヶ月の最高年間の年を比較して、比較したいことがあります。

function hideRows() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var s = ss.getSheetByName("Responses"); 
    var v = s.getRange("B:B").getValues(); 
    var today = new Date(); 
    var m = today.getMonth(); 
    var y = today.getYear(); 
    for(var i=3;i<v.length;i++){ 
    if(v[i][0] === "" || v[i][0].getYear() >= y){ 
     if(v[i][0].getMonth() >= m) { 
     var stophere = 0; 
     break; 
     } 
    } 
    } 
    if(i>1) { 
    s.hideRows(2,i-1); 
    } 
}; 
関連する問題