我有一个脚本,可以通过隐藏并显示适当的行来基于单元格(A1)过滤工作表。它正在工作,但是由于工作表每年都会变大,因此它在逐行隐藏/取消隐藏时已经运行非常缓慢。我想以某种方式批处理这些并仅执行一次隐藏/取消隐藏功能。不幸的是,我没有那么幸运。这是适用于两张纸的代码,但是速度太慢(太慢,有时会崩溃):
function chooseYearAdj() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("ADJUSTMENTS");
var yrCell = sheet.getRange("A1").getValue()
// var lastRow = sheet.getLastRow(); extra unnecessary var?
var allRange = sheet.getRange("A3:A")
var i=1
if (yrCell == "ALL" || yrCell == "all"){
// var rowAll = sheet.getRange("A:A"); extra unnecessary var?
sheet.unhideRow(allRange);
}
else
{
sheet.hideRow(allRange); // hides all rows below header
while ( sheet.getRange("A"+i).getValue() != "") { // i <= last interesting row
{
var year = sheet.getRange("R"+i).getValue(); // Checks the R column
if (year == yrCell) { // year == chosen year
var rowHide = sheet.getRange("A"+i);
sheet.unhideRow(rowHide);
}
i=i+1
}
}
}
}
function chooseYearTS() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("TEAM SALES");
var yrCell = sheet.getRange("A1").getValue()
// var lastRow = sheet.getLastRow(); extra unnecessary var?
var rowRange = sheet.getRange("A:A")
var i=3
if (yrCell == "ALL" || yrCell == "all"){
sheet.unhideRow(rowRange); //shows all rows
}
else
{
sheet.unhideRow(rowRange); // shows all rows below header
while ( sheet.getRange("A"+i).getValue() != "") { // i <= last interesting row
{
var year = sheet.getRange("CC"+i).getValue(); // Checks the R column
if (year != yrCell && year != "") { // year is neither blank nor the chosen year.
var rowHide = sheet.getRange("A"+i);
sheet.hideRow(rowHide);
}
i=i+1
}
}
}
}
其中第二个比第一个慢很多。我尝试在while循环中创建范围,然后隐藏/显示整个范围,但这没有任何改变。我承认,这是代码,可能会出现语法错误,因为这对我来说是新尝试:
function chooseYearAlt() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("ADJUSTMENTS");
var yrCell = sheet.getRange("A1").getValue()
// var lastRow = sheet.getLastRow(); extra unnecessary var?
var allRange = sheet.getRange("A3:A")
var i=1
var toHide = sheet.getRange()
if (yrCell == "ALL" || yrCell == "all"){
// var rowAll = sheet.getRange("A:A"); extra unnecessary var?
sheet.unhideRow(allRange);
}
else
{
sheet.hideRow(allRange); // hides all rows below header
while ( sheet.getRange("A"+i).getValue() != "") { // i <= last interesting row
{
var year = sheet.getRange("R"+i).getValue(); // Checks the R column
if (year == yrCell) { // year == chosen year
toHide = toHide + sheet.getRange("A"+i);
// var rowHide = sheet.getRange("A"+i);
// sheet.unhideRow(rowHide);
}
i=i+1
}
sheet.unhideRow(toHide);
}
}
}
我在这里的问题是,不能保证年份列会保持顺序,因此,我不能仅仅找到第一年的正确年份,然后在某天隐藏正确的行数。 ,它们最终可能更加混杂。
关于如何加快速度的任何想法?
这里是您的choiceYearAlt函数的更快选择: