【发布时间】:2017-03-04 23:43:12
【问题描述】:
我编写了这个脚本,它应该每晚运行,但问题是执行时间太长,因此服务器将其关闭。我们有一个电子表格,用作日历来组织我们的学校制作,我们希望它能够自动隐藏过去的日子。我大约 8 个月前编写了这个脚本,我花了大约 6 到 7 个小时才让它工作,并且在我们深入到电子表格中需要太长时间之前它工作了一段时间。这是脚本:
function hidePastDays(){
var ss = SpreadsheetApp.getActive();
var s = ss.getSheetByName("OVERVIEW");
var s2 = ss.getSheetByName("settings");
var rows = s.getMaxRows();
var today = s2.getRange(3, 2).getValue();
var allsheets = ss.getSheets();
s.showRows(1, rows);
var dates = s2.getRange(3,4,rows-2).getValues();
for (var d=0; d < dates.length; d++){
if (dates[d]<today-2){
s.hideRows(d+3, 1);
for (var g in allsheets){
var sheet=allsheets[g];
if (sheet.getSheetName() == "OVERVIEW" || sheet.getSheetName() == "settings"){}
else {
sheet.hideRows(d+3, 1);
}
}
}
}
}
我在想,向下扫描到正确的行然后将它们全部隐藏为一个范围一定更容易,因为我认为脚本一次只做一个。
感谢您提供的任何帮助。
【问题讨论】:
-
行是否按日期排列?如果代码找到具有第一个当前日期的行,如果代码隐藏从 3 到该行减去 1 行的所有行,是否可以工作?这可以在一个操作中完成,而不是一个一个地隐藏。
-
是的。电子表格会自动添加日期。但是,它需要找到当前日期,然后向后移动一行,因为如果同一天有多个活动,则日期不会重复,日期部分只是留空。
标签: google-apps-script google-sheets spreadsheet