Параметры typeof () для пользовательских функций различаются. Например:
function custom_function(p) {
return typeof(p);
}
=custom_function(A1:A1) // returns "number" or "string" depending upon value is in the single cell A1.
=custom_function(B1:B2) // returns "object" - a 2 dimenstional array representing the values in the cells in the range.
=custom_function("C1:C1") // returns "string" - representing "C1:C1"
Как видно из последнего, вы можете передать строку, представляющую диапазон, который затем можете обработать в соответствии с требованиями в функции:
function custom_function(cell) {
if(!cell.map && (typeof(cell === "string"))) { // not an array or a number
var range = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(cell);
var column = range.getColumn();
var row = range.getRow();
return "c: "+column+" r: "+row;
}
else {
return "Invalid Parameter";
}
}
Более полная дискуссия о передаче значений диапазона в пользовательские функции приведена в https://webapps.stackexchange.com/questions/10629/how-to-pass-a-range-into-a-custom-function-in-google-spreadsheets
Включая решения проблемы: если ссылка на диапазон передается в виде строки, вы не сможете скопировать ячейку, содержащую =custom_function("C1:C1")
, и ссылки на ячейки будут автоматически обновлены.
Обновление с учетом комментария : довольно простой способ, позволяющий копировать пользовательскую функцию с автоматически обновляемыми ссылками на ячейки, показан ниже.
=custom_function(A1:C3; ROW(A1); COLUMN(A1); ROW(C3); COLUMN(C3))
Таким образом, в настоящем скрипте GAS функция теперь имеет 5 параметров: параметр-1 - это двумерный массив значений ячеек, p2 и p3 - строка и столбец верхней левой части массива, а p4 и p5 строка и столбец в нижней правой части массива.
Или, если вы на самом деле не заботитесь о значениях, или с удовольствием воссоздаете диапазон в пользовательской функции, просто используя координаты:
=custom_function(ROW(A1); COLUMN(A1); ROW(C3); COLUMN(C3))