2011-01-28 17 views
11

¿Es posible definir una función en Google Spreadsheets que se pueda usar en cualquier celda?¿Es posible definir una nueva función en la hoja de cálculo de Google-docs?

Sería útil si pudiera definir y usar funciones que se refieran a otras celdas de la misma manera que puedo usar funciones nativas, p. Ej. ingresando =myfunction(C1, C2, C3)

+0

Estas funciones personalizadas son lentas. Ten cuidado. – fiatjaf

+0

Parece que las funciones disponibles en la hoja de cálculo no están todas disponibles para el script. Por ejemplo, intentar usar la función JOIN en un script da como resultado el error "JOIN no definido", aunque el uso de JOIN en la hoja de cálculo funciona bien. – Triynko

Respuesta

8

Sí - hay tutorial. Solo use funciones de JavaScript por nombre en su hoja de cálculo. Defínalos usando Tools> Script editor.

Ten cuidado con las restricciones de nombre; Estaba confundido por el comportamiento de las funciones que creé con nombres como "función x10() {}" no encontrada. Cambiar el nombre a un nombre más largo lo solucionó. Probablemente haya reglas documentadas para lo que no está permitido, pero no sé dónde están.

+5

x10 no es un nombre de función válido porque también es el nombre nativo de una celda (fila '10', columna 'X'). Además de eso, no hay reglas especiales. El otro hecho importante para recordar es que las funciones personalizadas SÓLO deben operar con los parámetros que se pasan, es decir, no deben usar valores externos porque la función debe ser determinista (la misma entrada siempre debe devolver el mismo valor, ya que las hojas de cálculo guardarán ese valor en caché). –

-2

Soy un "newbee". Pero es mi experiencia que solo puede acceder a una "celda" a través del objeto "rango". Debe definir el rango como una sola celda. Por ejemplo "A1: A1", le dará acceso a la celda en "A1".

Una RANGE es un objeto asociado a una "HOJA". UNA HOJA es un objeto asociado a una "HOJA DE DATOS".

Aquí algunos ejemplos de código para acceder a la celda A1 de la hoja activa actual:

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

Desde aquí se puede pasar el objeto como cualquier otro parámetro.

myFunction(cell_A1); 

La función de recepción debe "saber" que se trata de un "rango". Solo puede acceder a sus valores llamando a los "métodos" asociados al objeto "rango".

¡Cuidado! Un "rango" puede consistir en más de una celda. Su función llamada debería probar para ver si está funcionando con una sola célula. Si supera un rango de más de una celda, es posible que su función no actúe de la manera esperada.

Los dos métodos de un objeto de rango: "getNumRows()" y "getNumColumns()" devuelve los números de Filas y Columnas en un objeto de rango.

En general, si se utiliza métodos que se limitan a cambiar o acceder una sola célula, y operar en un conjunto mayor rango, la función sólo se realiza en el miembro de celda superior izquierda. Pero ten cuidado. Mientras que suponga que un método solo cambiará una sola celda, en realidad puede afectar a todas las celdas del rango. Lea la documentación de cerca.

Hay otro método para obtener un rango de una sola celda. Su instrucción se ve así:

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

Los dos primeros parámetros decir la función "GetRange" la ubicación de la celda (en la fila, el formato de la columna). Los dos segundos parámetros definen el número de "filas" y "columnas" asociadas al rango. Al establecerlos en "1", accede a una sola celda.

Espero que esto ayude.

+1

Esto no es lo que está preguntando. Está preguntando sobre el uso de la función custon al igual que las funciones integradas de la hoja de cálculo en las celdas. En esos casos, NO obtiene valores de celda como usted dijo. Su explicación solo se aplica a las funciones "regulares" con un script y no con funciones personalizadas. –

Cuestiones relacionadas