Обновите пользовательскую функцию автоматически
-
26-09-2019 - |
Вопрос
У меня есть пользовательская функция в качестве скрипта электронной таблицы Google, который зависит от значений некоторых других ячеек. Он работает в порядке, в первый раз, когда я положил его в камеру, но затем, когда я изменяю данные в других ячейках, он остается прежним. Как я могу сделать первую ячейку обновлять его значение автоматически, когда я меняю другие ячейки?
Решение
Я нашел ответ, который не полностью делает меня счастливым, но это достаточно хорошо, я думаю. Если вы добавите функцию под названием onEdit
К скрипту электронной таблицы его будет называться каждый раз, когда все осталось отредактировано. Итак, это код, который работал для меня: (у него есть некоторые детали, которые могут быть полезны, поэтому я оставил их неотредактированным)
function onEdit(event) {
if (SpreadsheetApp.getActiveSheet().getName().substr(0,5) == "thing")
SpreadsheetApp.getActiveSheet().getRange("I1").setValue(myCustomFunction());
}
Это делает листы, чье имя начинается с thing
, получить результат myCustomFunction
в клетку I1
.
Другие советы
У меня похожая проблема.
Вот как я делаю это банкоматом, но это не лучшее решение. Я ищу лучшую.
Если какое-либо значение при листе цен и столбца d меняется. Значение, если какая-либо значение соты меняется во всей колонке, он обновляет пользовательское значение функции.
//Search Price sheet with the given name. Return price. dummy param updates google ss once the "Prices" sheet values changed.
function searchPrice(price,dummy)
{
var SPREADSHEET_NAME = "Prices";
var SEARCH_COL_IDX = 2;
var RETURN_COL_IDX = 3;
var values = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SPREADSHEET_NAME).getDataRange().getValues();
for (var i = 0; i < values.length; i++)
{
var row = values[i];
if (row[SEARCH_COL_IDX] == price)
{
return row[RETURN_COL_IDX];
}
}
}
Вот как вы называете это = SearchPrice (B8, цены! D: D)
Просто дайте свою пользовательскую функцию манекен. Это ничего не делает в пользовательской функции.