Я считаю, что ваша ситуация и ваша цель следующие.
- Вы используете функцию
sheetnames()
в качестве настраиваемой функции в Google Spreadsheet. - Вы уже подтвердили, что ваша работает функция
sheetnames()
. - Вы хотите обновить sh пользовательскую функцию, когда лист удаляется, вставляется, копируется и имя листа изменяется.
По порядку Для достижения вышеуказанного я хотел бы предложить следующий метод.
Использование:
1. Подготовьте сценарий.
В этом случае образец сценария для обновления настраиваемой функции sheetnames()
в электронной таблице запускается триггером события OnChange. Для этого скопируйте и вставьте следующий образец сценария в привязанный к контейнеру сценарий электронной таблицы и сохраните сценарий.
function onChange(e) {
var lock = LockService.getDocumentLock();
if (lock.tryLock(10000)) {
try {
const prop = PropertiesService.getScriptProperties();
if ((e.changeType === "OTHER" || e.changeType === "REMOVE_GRID" || e.changeType === "INSERT_GRID") && !prop.getProperty("run")) {
const formula = "=sheetnames"; // <--- Please set the function name of the custom function.
const ss = e.source;
const tempFormula = "=sampleFormula";
ss.createTextFinder("^\\" + formula).matchFormulaText(true).useRegularExpression(true).replaceAllWith(tempFormula);
ss.createTextFinder("^\\" + tempFormula).matchFormulaText(true).useRegularExpression(true).replaceAllWith(formula);
prop.setProperty("run", "done");
} else {
prop.deleteProperty("run");
}
} catch(e) {
throw new Error(e);
} finally {
lock.releaseLock();
}
}
}
- Чтобы избежать дублирования запуска сценария,
LockService
используется. - Чтобы избежать бесконечного l oop триггера, используется
PropertiesService
.
2. Установите триггер события OnChange.
Чтобы выполнить функцию onChange
, установите триггер события OnChange в функцию onChange
. Вы можете увидеть способ установки в этом официальном документе .
3. Тестирование
Чтобы протестировать вышеуказанный скрипт, после того, как вы установили функцию onChange
в качестве устанавливаемого триггера события OnChange, например, вставьте новый лист. Этим вы можете подтвердить, что пользовательская функция sheetnames()
обновлена.
Ссылки: