it-swarm.com.ru

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

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

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

function usageByMonth(range,theDate) {
    [ do something with the arguments passed ]
}

В моем листе Google эта функция используется как

=usageByMonth('Source Meter Readings'!A5:A,B1)

При попытке отладки функции я обнаружил, что два аргумента являются «неопределенными». Я посмотрел на многие посты и даже скопировал функции непосредственно из примеров с тем же результатом.

8
Neil Lamka

Запуск функции из редактора кода не возвращает аргументы. В этой ситуации аргументы всегда будут неопределенными. Это также верно для ситуаций, таких как использование простого триггера 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 () в качестве аргумента.

8
Sandy Good

Разделитель аргументов функции зависит от локали электронной таблицы. Если языковой стандарт электронной таблицы использует запятую в качестве десятичного разделителя, разделитель аргументов - точка с запятой:

=usageByMonth('Source Meter Readings'!A5:A; B1)

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

1
mrts

Это может быть диапазон A5:A, попробуйте A5:A1000 или A:A. Смешивание адреса ячейки A5 с адресом столбца A, вероятно, сбивает с толку API.

0
Gerry