En Hojas de cálculo de Google, puede agregar algunas funciones de secuencias de comandos. Estoy agregando algo para el onEdit
evento, pero no puedo decir si está funcionando. Por lo que puedo decir, no puede depurar un evento en vivo desde Google Sheets, por lo que debe hacerlo desde el depurador, lo cual no tiene sentido ya que el argumento del evento pasado a mi onEdit()
función siempre estará indefinido si lo ejecuto desde el Script Editor
.
Entonces, estaba tratando de usar el Logger.log
método para registrar algunos datos cada vez onEdit
que se llama a la función, pero también parece que solo funciona cuando se ejecuta desde Script Editor
. Cuando lo ejecuto desde Script Editor
, puedo ver los registros yendo aView->Logs...
Esperaba poder ver los registros de cuando el evento realmente se ejecuta, pero no puedo entenderlo.
¿Cómo depuro estas cosas?
fuente
Logger.log('firstLog');MailApp.sendEmail({to:'[email protected]',subject: "subject here ^_^",body: Logger.getLog()});
Respuestas:
ACTUALIZAR:
Como está escrito en esta respuesta,
Stackdriver Logging es el método preferido de inicio de sesión ahora.
Use
console.log()
para iniciar sesión en Stackdriver.Logger.log
le enviará un correo electrónico (eventualmente) de errores que ocurrieron en sus scripts o, si está ejecutando cosas desde elScript Editor
, puede ver el registro desde la última función de ejecución yendo aView->Logs
(todavía en el editor de scripts). Nuevamente, eso solo le mostrará cualquier cosa que haya sido registrada desde la última función que ejecutó desde adentroScript Editor
.El guión que estaba tratando de poner en funcionamiento tenía que ver con hojas de cálculo: hice una hoja de cálculo de tipo de lista de verificación que clasificaba los elementos por prioridades y demás.
Los únicos activadores que instalé para ese script fueron los activadores onOpen y onEdit. La depuración del desencadenador onEdit fue la más difícil de descifrar, porque seguía pensando que si establecía un punto de interrupción en mi función onEdit, abría la hoja de cálculo, editaba una celda, que mi punto de interrupción se dispararía. Este no es el caso.
Sin embargo , para simular haber editado una celda, terminé teniendo que hacer algo en la hoja de cálculo real. Todo lo que hice fue asegurarme de que la celda que quería que se tratara como "editada" estuviera seleccionada, luego
Script Editor
, iría aRun->onEdit
. Entonces mi punto de ruptura sería golpeado.Sin embargo, tuve que dejar de usar el argumento de evento que se pasa a la función onEdit; no puede simular eso haciendo
Run->onEdit
. Cualquier información que necesitaba de la hoja de cálculo, como qué celda se seleccionó, etc., tuve que averiguarla manualmente.De todos modos, respuesta larga, pero finalmente lo descubrí.
EDITAR :
Si desea ver la lista de verificación de todo lo que hice, puede consultarla aquí
(sí, sé que cualquiera puede editarlo, ¡ese es el punto de compartirlo!)
Esperaba que también te dejara ver el guión. Como no puedes verlo allí, aquí está:
fuente
Verdadero: defina el argumento del evento usted mismo para la depuración. Consulte ¿Cómo puedo probar una función de activación en GAS?
Cierto otra vez, pero hay ayuda. La biblioteca BetterLog de Peter Hermann redirigirá todos los registros a una hoja de cálculo, permitiendo el registro incluso desde el código que no está adjunto a una instancia del editor / depurador.
Si está codificando en un script contenido en una hoja de cálculo, por ejemplo, puede agregar solo esta línea en la parte superior de su archivo de script, y todos los registros irán a una hoja "Registros" en la hoja de cálculo. No es necesario otro código, solo utilícelo
Logger.log()
como lo haría normalmente:fuente
console.log()
debería ser la mejor respuesta ahoraActualización de 2017: el registro de Stackdriver ahora está disponible para Google Apps Script. Desde la barra de menú en el editor de script, vaya a:
View > Stackdriver Logging
para ver o transmitir los registros.console.log () escribirá
DEBUG
mensajes de nivelEjemplo de
onEdit()
registro:Luego verifique los registros en la IU de Stackdriver etiquetados
onEdit() Event Object
para ver la salidafuente
Logger.log
. ¿Cómo es esto diferente deconsole.log
lo que usas? Soy muy nuevo en las herramientas, así que solo trato de descubrir qué es todo.Un poco hacky, pero creé una matriz llamada "consola", y cada vez que quería salir a la consola empujé a la matriz. Luego, cada vez que quería ver la salida real, simplemente regresaba en
console
lugar de lo que estaba regresando antes.fuente
console.log('smth')
funciona perfectamente, pero ¿qué tal en GAS?I just returned console
¿ Cuándo cómo lo sacas?Si tiene abierto el editor de scripts, verá los registros en Ver-> Registros. Si su script tiene un activador de edición, realice un cambio en la hoja de cálculo que debería activar la función con el editor de script abierto en una segunda pestaña. Luego vaya a la pestaña del editor de scripts y abra el registro. Verá lo que su función pase al registrador.
Básicamente, siempre que el editor de scripts esté abierto, el evento escribirá en el registro y se lo mostrará. No se mostrará si alguien más está en el archivo en otro lugar.
fuente
Revisé estas publicaciones y de alguna manera terminé encontrando una respuesta simple, que estoy publicando aquí para aquellos que quieren soluciones cortas y dulces:
console.log("Hello World")
en su guión.fuente
Estoy teniendo el mismo problema, encontré lo siguiente en la web en alguna parte ...
Sin embargo, los controladores de eventos en Docs son un poco complicados. Debido a que los documentos pueden manejar múltiples ediciones simultáneas por parte de múltiples usuarios, los controladores de eventos se manejan del lado del servidor. El principal problema con esta estructura es que cuando falla un script de activación de eventos, falla en el servidor. Si desea ver la información de depuración, deberá configurar un activador explícito en el menú de activadores que le envíe por correo electrónico la información de depuración cuando el evento falle o de lo contrario fallará en silencio.
fuente
Está lejos de ser elegante, pero durante la depuración, a menudo me conecto al Logger, y luego uso getLog () para recuperar su contenido. Entonces, yo:
Básicamente, se convierte en un problema de salida de JavaScript .
Carece enormemente de la funcionalidad de las
console.log()
implementaciones modernas , pero el Logger todavía ayuda a depurar Google Scripts.fuente
Solo como un aviso. Hice una función de prueba para mi hoja de cálculo. Utilizo la variable google throws en la función onEdit (e) (la llamé e). Luego hice una función de prueba como esta:
Al llamar a esta función de prueba, todo el código se ejecuta como si tuviera un evento en la hoja de cálculo. Acabo de poner en la posición de la celda que edité lo que me dio un resultado inesperado, estableciendo el valor como el valor que puse en la celda. OBS! Para obtener más variables, Google proporciona a la función ir aquí: https://developers.google.com/apps-script/guides/triggers/events#google_sheets_events
fuente
Actualmente, está limitado a la naturaleza vinculada al contenedor de usar scripts dentro de los documentos. Si crea una nueva secuencia de comandos fuera de los documentos, podrá exportar información a una hoja de cálculo de Google y usarla como una herramienta de registro.
Por ejemplo en tu primer bloque de código
Cuando estoy trabajando con GAS, tengo dos monitores (puede usar dos ventanas) configurados con uno que contiene el entorno GAS y el otro que contiene el SS para que pueda escribir información e iniciar sesión.
fuente
La consola de desarrollo registrará los errores generados por el script de la aplicación, por lo que puede lanzar un error para que se registre como un archivo console.log normal. Se detendrá la ejecución, pero aún puede ser útil para la depuración paso a paso.
aparecerá en la consola de manera similar a
console.log('hello world')
fuente
simplemente depure su código de hoja de cálculo de esta manera:
muestra así:
fuente
onEdit
)