martes, 15 de enero de 2019

Problemas con la marca temporal y otras fechas

El caso es que, mediante código, recojo la marca temporal y quiero mediante las funciones de fecha de javascript utilizar las partes de la fecha para otro propósito.

Juraría que antes funcionaba sin problemas, pero, ahora me da error y me dice que no encuentra getDate(). He descubierto que la marca temporal me la almacena como String y, supongo, que por eso no funciona getDate().

Después de probar algunas cosas, la solución que mejor me funciona para este caso es la siguiente:

var marca_temporal = e.values[0]

var trozos = marca_temporal.split(" ")  // Hago dos trozos, la fecha y las horas,minutos,segundos.
var fecha = trozos[0].split("/") // Cojo el primer trozo y lo vuelvo a dividir

var dia = fecha[0]
var mes = fecha[1]
var aino = fecha[2]


var tiempo = trozos[1].split(":") // Cojo la segunda parte y la vuelvo a dividir
var hora = tiempo[0]
var minutos= tiempo[1]
var segundos= tiempo[2])


Y así tengo todas las partes de la marca temporal cada una en su variable.

En el formulario tengo también un campo que recoge una fecha (sin horas, minutos, segundos)

En este caso me basta con:

var mifecha = e.values[3]

var cachos = mifecha.split("/")
var dia = cachos[0]
var mes = cachos[1]
var aino = cachos[2]

lunes, 14 de enero de 2019

Macro para crear activadores del código

En nuestro trabajo hacemos herramientas con hojas de cálculo que luego distribuimos por centros escolares.
En el proceso de instalar la herramienta en cada centro, como es lógico, creamos una copia de la herramienta. En dicha copia está todo lo necesario para que funcione salvo los activadores del código, que hay que volver a instalarlos.


Hasta ahora, gracias a unos apuntes le mostrábamos a los usuarios como hacerlo de forma manual.
En este artículo, sin embargo, mostramos como hacer este proceso mucho más sencillo para el usuario final.


Necesitamos dos funciones:

function instalar(){
// Apuntamos a la herramienta
var herramienta = SpreadsheetApp.getActiveSpreadsheet()
// Apuntamos a una pestaña especial donde guardamos variables. En este caso guardaremos una variable para que solamente se instalen una vez los activadores
var variables= herramienta.getRangeByName('variables').getSheet()

// Si no está guardada la variable, significa que es la primera vez que el usuario utiliza esta función
if (variables.getRange('G1').getValue() !="fuera"){


// Las siguientes líneas muestra diferentes activadores creados (tiempo, enviar formulario, editar). En la documetación de Google Script encontrarás más información. Después del método newTrigger se escribe el nombre de la función que queremos activar.
ScriptApp.newTrigger('avisar_ausencias').forSpreadsheet(herramienta).onFormSubmit().create()
ScriptApp.newTrigger('mandar_formulario_feedback').forSpreadsheet(herramienta).onFormSubmit().create()
ScriptApp.newTrigger('grabar_asignacion2').forSpreadsheet(herramienta).onEdit().create()
ScriptApp.newTrigger('mandar_correo_con_guardia_hecha').timeBased().everyHours(1).create()

// Una vez creados, mostramos mensaje y damos la posibilidad de que no vuelva a correr esta función gracias a la variable borrar
var borrar = Browser.msgBox('Activadores instalados. \\n\\nDale al botón de aceptar para que no vuelva a salir este mensaje.',Browser.Buttons.OK_CANCEL)

// Si el usuario dice que sí , escribimos la palabra "fuera" y, así, hacemos que no vuelva a entrar en este condicional
if (borrar=='ok'){
variables.getRange('G1').setValue('fuera')

}

}
else {
// En la segunda vez que entre, la variable está ya guardada y mostramos este mensaje

Browser.msgBox('Ya tienes instalados todos los activadores.\\n\\n¡No hace falta que vuelvas a hacerlo!')
}
 

}

// Para avisar al usuario de que debe correr el código de activadores debemos incluir en la función onOpen (o en cualquiera que corra al abrir) estas líneas. El condicional hace que solamente aparezca la primera vez que se abre la herramienta

var herramienta = SpreadsheetApp.getActiveSpreadsheet()
var variables= herramienta.getRangeByName('variables').getSheet()
if (variables.getRange('G1').getValue() !="fuera"){
  Browser.msgBox('Para que el código funcione, debes activar el código. \\n\\n Vete a -herramientas-Macros \\ny utiliza -Activar código')
  }




Dos notas:
  1. Para que el usuario pueda "instalar" los activadores sin entrar en la zona de secuencias de comandos, podemos incluir dicha función entre las macros y así ponerselo fácil.
  2. Por suerte, el activador "al abrir" si que se hereda en la copia, por lo que no hace falta activarlo :)

Crear PDF horizontal

El código que vamos a mostrar aquí no ha sido creado por nosotros, sino que lo hemos encontrado en Internet. Objetivo: Publicar una pesta...