Поток сценариев:
- Создание
class
для создания объекта конфигурации для каждого набора взаимодействий - Вызов метода run класса для выполнения требуемого действия
Пример сценария:
Предполагая, что именованные диапазоны 1,2,3 находятся на A1, B1 и C1 на листе «Начать здесь >>»,
/**
* @param {GoogleAppsScript.Events.SheetsOnEdit} e
*/
const onEdit = e => {
const range = e.range;
if (range.getSheet().getName() !== 'Start Here >>') return;//exit if edit is not in Start Here >> sheet
class config {
/**
* @param {string} sheetToDo Sheet to act upon
* @param {string} func function to run on sheet
* @param {number} index Index of column/row to start desired action
* @param {number} num Number of Rows/Columns to hide/show
* @param {string} strToCheck The string to check against edited value
* @param {any} val edited value
*/
constructor(sheetToDo, func, index, num, strToCheck, val) {
this.sheetToDo = sheetToDo;
this.func = func;
this.index = index;
this.num = num;
this.switchFunc_(strToCheck === val);
}
run() {
SpreadsheetApp.getActive()
.getSheetByName(this.sheetToDo)
[this.func](this.index, this.num);
}
switchFunc_(toggle) {//To switch hide to show and viceversa
if (!toggle) {
const change = ['hide', 'show'];
this.func =
change[Number(!change.indexOf(this.func.slice(0, 4)))] +
this.func.slice(4);
}
}
}
const map = {
A1: val => new config('Sheet2', 'hideColumns', 3, 1, 'A', val),//if edit is in A1,
B1: val => new config('Sheet1', 'showRows', 15, 4, 'Yes', val),
C1: val => new config('Sheet1', 'showRows', 26, 15, 'Yes', val),
};
const createConfig = map[range.getA1Notation()];
if (createConfig) createConfig(e.value).run();
};
Производительность :
- ~ 1-2 с, если редактирование приводит к скрытию / отображению строк
Ссылки: