Передача аргументов / параметров из пользовательской функции Google sheets в функцию скрипта

Я застрял на чем-то основном. Как передать аргументы пользовательской функции Google Sheets.

у меня есть функция в редакторе кода сценария приложений, определенная как:

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)

в противном случае было бы невозможно передать десятичные дроби в функции.


может быть


обязательно используйте точный регистр, поскольку идентификаторы чувствительны к регистру в скрипте Google.

ie. даты не совпадают даты или даты

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