2011-01-28 2 views
11

Возможно ли определить функцию в электронных таблицах Google, которая может использоваться в любой ячейке?Можно ли определить новую функцию в электронной таблице Google-документов?

Было бы полезно, если бы я мог определять и использовать функции, относящиеся к другим ячейкам, таким же образом, что я могу использовать собственные функции, например. путем ввода =myfunction(C1, C2, C3)

+0

Эти пользовательские функции работают медленно. Быть осторожен. – fiatjaf

+0

Похоже, что функции, доступные в электронной таблице, не все доступны для скрипта. Например, попытка использования функции JOIN в скрипте приводит к ошибке «JOIN not defined», хотя использование JOIN в самой электронной таблице отлично работает. – Triynko

ответ

8

Да - есть tutorial. Просто используйте javascript-функции по имени в своей электронной таблице. Определите их, используя Tools> Script editor.

Следите за ограничениями по названию; Меня смутило поведение функций, которые я создал с именами типа «function x10() {}», которые не были найдены. Переименование на более длинное имя зафиксировано. Есть, вероятно, документированные правила того, что не разрешено, но я не знаю, где они.

+5

x10 не является допустимым именем функции, так как это также собственное имя ячейки (строка «10», столбец «X»). Кроме того, особых правил нет. Другим важным фактом, который следует помнить, является то, что пользовательские функции должны ТОЛЬКО работать с передаваемыми параметрами, то есть не должны использовать внешние значения, потому что функция должна быть детерминированной (тот же ввод должен всегда возвращать то же значение, что и электронные таблицы будут кэшировать это значение). –

-2

Я «новичок». Но есть ли мой опыт, что вы можете получить доступ только к «ячейке» через объект «range». Вы должны определить диапазон как одну ячейку. Например, «A1: A1», вы получите доступ к ячейке в «A1».

RANGE - это объект, связанный с «ЛИСТОМ». ЛИСТ - это объект, связанный с «SPREADSHEET».

Вот некоторые примеры кода для доступа ячейку A1 в текущем активном листе:

var cell_A1 = SpreadsheetApp.getActiveSheet().getRange("A1:A1"); 

Отсюда вы можете передать объект, как и любой другой параметр.

myFunction(cell_A1); 

Функция приема должна «знать», что она имеет дело с «диапазоном». Он может получить доступ только к своим значениям, вызвав «методы», связанные с объектом «диапазон» .

Будьте осторожны! «Диапазон» может состоять из более чем одной ячейки. Ваша вызываемая функция должна проверить, что она работает с одной ячейкой. Если вы передадите диапазон более чем одной ячейки, ваша функция может не действовать так, как вы ожидаете.

Два метода объекта диапазона: «getNumRows()» и «getNumColumns()» возвращает числа строк и столбцов в объекте диапазона.

В общем случае, если вы используете методы, которые ограничены заменой или доступом к одной ячейке, и работают с большим диапазоном, функция будет только , выполняемой в элементе верхней левой части ячейки. Но будь осторожен. В то время как вы, , предположили, что метод изменит только одну ячейку, на самом деле влияет на все ячейки в диапазоне. Прочитайте документацию внимательно.

Существует еще один способ получения диапазона одной ячейки. Его инструкция выглядит следующим образом:

var cell_B2 = SpreadsheetApp.getActiveSheet().getRange(2, 2, 1, 1). 

Первые два параметра говорят функцию «getRange» по месту нахождения ячейки (в строке, формат столбца). Вторые два параметра определяют число «строк» ​​и «столбцов», связанных с диапазоном. Установив их как «1», вы получаете доступ к одной ячейке.

Надеюсь, это поможет.

+1

Это не то, о чем он спрашивает. Hes спрашивает о том, как использовать функцию custon так же, как встроенные функции электронных таблиц в ячейках. В тех случаях вы НЕ получаете значения клеток, как вы сказали. Ваше объяснение применимо только к «обычным» функциям, использующим скрипт, а не пользовательские функции. –

Смежные вопросы