Estoy atrapado en algo básico. ¿Cómo paso argumentos a una función personalizada de Google Sheets?

Tengo una función en el editor de código de Script de aplicaciones definida como: Tengo una función en el editor de código de Script de aplicaciones definido como:

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

En mi hoja de Google, la función se usa como

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

Al intentar depurar la función, encuentro que los dos argumentos están "indefinidos". He visto muchas publicaciones e incluso he copiado funciones directamente de los ejemplos con el mismo resultado.

17
Neil Lamka 26 ene. 2016 a las 21:39

3 respuestas

La mejor respuesta

Ejecutar una función desde el editor de código no recupera los argumentos. En esa situación, los argumentos siempre estarán indefinidos. Esto también es válido para situaciones como el uso del activador simple onEdit(). La única forma de obtener los argumentos pasados a la función es ingresando una función personalizada válida en la celda de la hoja de cálculo.

Si desea probar el código para una función personalizada desde el editor de código, debe "codificar" los valores de los argumentos.

Además, Logger.log() no registrará nada en el registro cuando se calcule una función personalizada en la hoja.

Comience con una función personalizada simple que funcione y desarrolle sobre ella.

Si desea pasar un rango al código para la función personalizada, debe comprender qué es una matriz bidimensional:

Matriz bidimensional:

[  [inner Array One],  [inner Array Two], [etc]  ]

Los datos de un rango se colocan en una matriz bidimensional. Hay UNA matriz externa, con matrices internas. Las matrices internas tienen tantos elementos como el número de columnas del rango.

[  ['single value from first column', 'single value second column']  ]

La matriz 2D anterior es para solo 1 fila con dos columnas.

Entonces, para crear una función personalizada simple como prueba, cree una función:

function myCustomFunction(argOne) { 
  return argOne[0][0];
};

Si el rango era A1: B5, la función personalizada devolverá el valor en A1;

=myCustomFunction(A1:B5)

La única forma de saber con certeza si su argumento se pasó a la función del servidor .gs es si obtiene un resultado.

Hay entradas que no puedes usar. Si usa una entrada que no está permitida, entonces (para citar de la documentación):

Si una función personalizada intenta devolver un valor basado en una de estas funciones incorporadas volátiles, mostrará Cargando ... indefinidamente.

Por ejemplo, no puede usar NOW () o RAND () como argumento.

13
Alan Wells 11 ago. 2017 a las 12:19

Asegúrese de utilizar mayúsculas y minúsculas, ya que los identificadores distinguen entre mayúsculas y minúsculas en Google Script.

Es decir. que no es lo mismo que la fecha o la fecha

Este es un error común para aquellos que no están acostumbrados a los lenguajes que distinguen entre mayúsculas y minúsculas.

-1
ShayneFromOz 21 ago. 2017 a las 08:54

Puede ser el rango A5:A, pruebe con A5:A1000 o A:A. Mezclar una dirección de celda A5 con una dirección de columna A probablemente confunda la API.

0
Max von Hippel 22 may. 2018 a las 02:16