我找到了this solution,但我正努力让它在我的工作表上工作。
提交该问题的用户有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 :(得分: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);
}
};
答案 1 :(得分: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);
}
答案 2 :(得分:0)
function onOpen(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Responses');
var today= new Date();
var today=today.setDate(today.getDate()-30); //minus 30 days
for ( var i = sheet.getLastRow(); i >= 2 ; i-- ) {
var filter = sheet.getRange(i, 2).getValue();//Evaluates Column B
if ( filter.valueOf() < today.valueOf()) {
sheet.hideRows(i); }
}
}