sheet - Depuración de una función personalizada en Google Apps Script
java script google sheet (1)
Es probable que el depurador no le mienta; si inicia esa función en el depurador, no tendrá parámetros pasados. Sin embargo, no debes preocuparte, solo debes asegurarte de que obtienes valores para usar para la depuración. Eche un vistazo a ¿Cómo puedo probar una función de disparo en GAS? , que demuestra técnicas que se pueden aplicar para funciones personalizadas.
En lugar de definir un evento para pasar a la función, querrá proporcionar (o recuperar de su hoja de cálculo) valores para los parámetros.
function test_drivingDistance() {
// Define a set of test values
var testSet = [[ ''Washington, DC'', ''Seattle, WA'' ],
[ ''Ottawa, ON'', ''Orlando, FL''],
[ ''Paris, France'', ''Dakar, Senegal'']];
// Run multiple tests
for (var test in testSet) {
Logger.log(''Test '' + test + '' = '' + drivingDistance(testSet[test][0],testSet[test][1]));
}
// Get parameters from sheet
var TestFromSheet = drivingDistance(ss.getRange(''A1'').getValue(),ss.getRange(''A2'').getValue());
}
Entiendes la idea. Todavía puede establecer puntos de interrupción dentro de su función, o usar debugger
para pausar la ejecución.
Editar - examinar argumentos
¿Qué argumentos recibe la función personalizada cuando se llama desde una hoja de cálculo?
Está limitado en lo que puede hacer para depurar esto, ya que el depurador no se puede usar para examinar su función personalizada cuando se invoca desde Hojas de cálculo, y las limitaciones de seguridad en las funciones personalizadas bloquean el Registro. Puede ser suficiente para entender el argumento en general. Si bien las funciones de JavaScript pueden tener parámetros nombrados, todos los argumentos se pasan como un objeto parecido a una matriz, llamados arguments
. Esta función personalizada devolverá una matriz que informa los argumentos recibidos. Cuando se llama desde una hoja de cálculo, cada argumento aparecerá en su propia celda, comenzando en la celda en la que ingresas la función:
function testArguments( ) {
var argArray = [];
for (var arg in arguments) {
argArray.push("arguments[" + arg + "] = " + JSON.stringify(arguments[arg]))
}
return argArray;
}
En javascript, en realidad no hay tipos como int o float, solo Number. Esos parámetros se mostrarán sin comillas y se verán como números. Las fechas llegan como objetos de Fecha, pero cuando se imprimen de esta manera aparecen como cadenas de Fecha y. Las cadenas tienen comillas.
Una función personalizada nunca recibe un rango como argumento; cuando proporciona un parámetro de rango en la hoja de cálculo, sus contenidos se recopilan en una matriz de una o dos dimensiones, y la matriz es el argumento.
Intento crear mi primera función personalizada para una hoja de cálculo de Google en Apps Script y estoy teniendo dificultades para usar el depurador.
Estoy trabajando en el código de demostración de función personalizada de la documentación de Google y he establecido un punto de interrupción en la función personalizada drivingDistance(origin, destination)
que se utiliza en una celda de mi hoja de cálculo. El problema que tengo es que el depurador muestra los parámetros que se pasan a la función como undefined
. Sin embargo, el contenido de cualquier otra variable que se crea durante la ejecución se muestra correctamente (siempre que no dependan de los parámetros de entrada).
Lo curioso es que, aunque los parámetros de entrada se muestran como indefinidos, los cálculos de la función tienen éxito, por lo que parece ser un problema de depuración. Lamentablemente, este problema me impide aprender con éxito a crear y depurar código propio (ya que tendré que trabajar con parámetros de entrada complejos).
Tengo la sensación de que el problema está relacionado con la ejecución en el servidor de Apps Script, así que traté de registrar los parámetros de entrada usando la clase Logger y también intenté copiar estas variables en nuevas variables locales. Pero todo lo que se me ocurrió fue undefined
.
Otra pista extraña es que ese tipo de parámetros devuelve String
. Pero obtener la longitud de ellos arroja un error y tratar de concatenarlos con otra cadena devuelve la cadena "indefinida" (ver el volcado de pantalla).
Estoy buscando ideas sobre lo que está pasando aquí.