我有一个脚本,我在多个Spreadsheets上运行...它会自动隐藏包含特定值的行。目前这个脚本设置为每天凌晨3点左右运行,以确保在处理过程中没有人处于活动状态。问题是我现在遇到的是这些表格太大而无法使用我当前的脚本,它逐行运行。脚本超时但未完成。我猜它仍在所有已隐藏的行上运行脚本。
这是我当前的脚本,非常基本:
function autoHide() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("SHIPPING");
//get data from column
var data = sheet.getRange('AD:AD').getValues();
//iterate over all rows
for(var i=0; i< data.length; i++){
//compare first character, if greater than 0, then hide row
if(data[i][0] > 0){
sheet.hideRows(i+1);
}
}
}
我一直在寻找更好的选择,并且发现人们在谈论使用数组过滤器或批量运行的地方,只是不同的东西似乎不足以让我翻译成我正在处理的东西。我知道逐行运行并不是最好的方法,尤其是超过1000行且不断增长。
对于最佳情况,我希望有一个非常有效的脚本,它使用我当前脚本所做的处理的一小部分。否则,如果只有一种方法可以在可见的行上运行脚本,那就差不多了。最糟糕的情况是,如果有一种方法可以告诉它在它给出超时错误时从中断的地方继续...通过放置某种类型的标签或某些东西来知道从哪里开始备份。
我认为不需要链接工作表,我只需要能够在名为“SHIPPING”的工作表中隐藏AD列中数字大于0的任何行。
答案 0 :(得分:0)
虽然您可以加快脚本本身的速度(例如通过批量连续需要隐藏的行),但也会超时。
相反,您的脚本应该在脚本属性中记住它处理的最后一行,如果脚本超时,它将继续从该行开始。
您还需要更改触发时间。让它每10分钟运行一次,但只在1)过去的凌晨3点和b)处理的最后一行还不是最后一行(完成后重置为零)时才开始处理。
这应该处理巨大的床单就好了。到凌晨5点它将从凌晨3点起运行12次,因此它应该能够处理12次以上的行
注意我选择10分钟触发器,以便先前的触发器(可以运行6分钟)不会与下一个触发器重叠
确保在工作表和脚本文件属性中设置时区,以便在检查过去的凌晨3点时是否使用时区。