У меня есть простой набор данных на странице Google, занимающий несколько столбцов (A: N) и около 100 строк вниз.Каждая строка представляет задачу, и задача может находиться в состоянии ОТКРЫТО или ЗАКРЫТО.Значение состояния находится в столбце M.
По умолчанию все задачи имеют статус «ОТКРЫТО», однако, когда пользователь закрывает задачу и выбирает статус «ЗАКРЫТО», я хочу скрыть строку этой задачи.Хотя приведенный ниже код работает должным образом (начальная версия 1), он выглядит медленным и медленным.
В поисках решения я сократил код до версии 2, однако с теми же результатами и, таким образом, думаю, что долженчто-то фундаментальное в том, как работает этот скрипт.
Я также проверил это решение ( Скрипт Google листов, чтобы скрыть строки в пакетном .), но в моем случае он вообще не работалскорость не сильно изменилась.Работая с их примером, я создал версию 3 кода.
Буду признателен за любые улучшения этого кода, пожалуйста.
Спасибо.
PS.В приведенном ниже коде (версия 1) я тестирую второй столбец (B), поэтому getRange (1,2, lastRow, 1)
// Version 1
function hideClosed_ver1() {
var sheet = SpreadsheetApp.getActive().getSheetByName("Hide");
var lastRow = sheet.getLastRow();
var arr = sheet.getRange(1,2,lastRow,1).getValues();
for(var i = 0; i < arr.length; i++)
{
if(arr[i][0]==='Closed')
{
sheet.hideRows(i + 1);
}
}
}
// Version 2
function hideClosed_ver2() {
var app = SpreadsheetApp.getActive().getSheetByName('Hide');
app.getRange('B:B').getValues().forEach(function (r, i) {
if (r[0] == "Closed")
app.hideRows(i + 1)
});
}
// Version 3
function hideClosed_ver3() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Hide");
var currentRange = ss.getRangeByName("Status");
var rangeStart = currentRange.getRow();
var values = currentRange.getValues();
var index = 0, rows = 1;
var show = !(values[0][1] == "Closed" );
for (var i = 1, length = values.length; i < length; i++) {
if (values[i][0] == "Closed" ) {
if (show) {
sheet.showRows(rangeStart + index, rows);
show = false;
index = i;
rows = 1;
} else
rows++;
} else {
if (show)
rows++;
else {
sheet.hideRows(rangeStart + index, rows);
show = true;
index = i;
rows = 1;
}
}
}
if (show)
sheet.showRows(rangeStart + index, rows);
else
sheet.hideRows(rangeStart + index, rows);
}