Как передать строку и столбец вместо значения в пользовательской функции Google Sheets? - PullRequest
0 голосов
/ 22 января 2019
function calculateIntervall(note) {//The passing argument gives me the value of the cell with the note, NOT the column or row of particularly this cell
  var spreadsheet = SpreadsheetApp.getActive();
  var col = spreadsheet.getActiveCell().getColumn();//get the column of note anyhow?
  var row = spreadsheet.getActiveCell().getRow();//get the row of note anyhow?
  note = spreadsheet.getCurrentCell().offset(row, col).activate().getNote();//get the value of the note
  return col + row;
};

Это просто пример программы, которая лучше всего объясняет мой вопрос. Текущая программа возвращает сумму строки и столбца активной ячейки (ячейка с функцией). Но мне нужна сумма параметров ячейки с пометкой.

Я просто хочу, чтобы строка и столбец были примерно такими (используя стандартные функции):

=ROW(note)
=COLUMN(note)

Функции обычно выглядят так:

=ROW(A5) -> this returns 5
=COLUMN(C2) -> this returns 3

1 Ответ

0 голосов
/ 22 января 2019

Параметры 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...