Передача аргументов / параметров из пользовательской функции листов 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

Это распространенная ошибка для тех, кто не привык к чувствительным к регистру языкам!

Другие вопросы по тегам