Передача аргументов / параметров из пользовательской функции листов Google в функцию сценария
Я застрял на чем-то базовом. Как передать аргументы в пользовательскую функцию Google Sheets.
У меня есть функция в редакторе кода Apps Script, определенная как:
function usageByMonth(range,theDate) {
[ do something with the arguments passed ]
}
В моем листе Google эта функция используется как
=usageByMonth('Source Meter Readings'!A5:A,B1)
При попытке отладки функции я обнаружил, что два аргумента являются "неопределенными". Я посмотрел на многие посты и даже скопировал функции непосредственно из примеров с тем же результатом.
4 ответа
Запуск функции из редактора кода не возвращает аргументы. В этой ситуации аргументы всегда будут неопределенными. Это также верно для ситуаций, таких как использование onEdit()
простой триггер. Единственный способ получить аргументы, передаваемые в функцию, - это ввести допустимую пользовательскую функцию в ячейку электронной таблицы.
Если вы хотите проверить код для пользовательской функции из редактора кода, вы должны "жестко кодировать" значения аргумента.
Также, Logger.log()
не будет ничего записывать в журнал при вычислении пользовательской функции на листе.
Начните с простой пользовательской функции, которая работает, и развивайте ее.
Если вы хотите передать диапазон в код для пользовательской функции, вы должны понимать, что такое двумерный массив:
Двумерный массив:
[ [inner Array One], [inner Array Two], [etc] ]
Данные из диапазона помещаются в двумерный массив. Существует ОДИН внешний массив с внутренними массивами. Внутренние массивы имеют столько же элементов, сколько и количество столбцов в диапазоне.
[ ['single value from first column', 'single value second column'] ]
Вышеуказанный 2D-массив предназначен только для 1 строки с двумя столбцами.
Итак, чтобы создать простую пользовательскую функцию в качестве теста, создайте функцию:
function myCustomFunction(argOne) {
return argOne[0][0];
};
Если диапазон был A1:B5, пользовательская функция вернет значение в A1;
=myCustomFunction(A1:B5)
Единственный способ узнать наверняка, если ваш аргумент был передан в функцию сервера.gs, это вернуть результат.
Есть входы, которые вы не можете использовать. Если вы используете вход, который не разрешен, то (цитата из документации):
Если пользовательская функция пытается вернуть значение, основанное на одной из этих изменчивых встроенных функций, она будет отображать Загрузка... неопределенно долго.
Например, вы не можете использовать NOW() или RAND() в качестве аргумента.
Разделитель аргументов функции зависит от локали электронной таблицы. Если языковой стандарт электронной таблицы использует запятую в качестве десятичного разделителя, разделитель аргументов - точка с запятой:
=usageByMonth('Source Meter Readings'!A5:A; B1)
В противном случае было бы невозможно передать десятичные числа в функции.
Это может быть A5:A
диапазон, попробуйте A5:A1000
или же A:A
, Смешивание адреса ячейки A5
с адресом столбца A
наверное смущает API.
Обязательно используйте точный регистр, так как идентификаторы чувствительны к регистру в Google Script.
то есть. theDate не совпадает с thedate или TheDate
Это распространенная ошибка для тех, кто не привык к чувствительным к регистру языкам!