Whoa !!! Retrocede el camión. Hay un enfoque mucho más simple
He estado investigando esto un poco en las últimas semanas porque estoy planeando hacer lo mismo para mis informes mensuales. Todavía no tengo el código real, pero lo agregaré a medida que avance.
En Google Docs hay tantos de API y términos similares relacionados con el trabajo con documentos que las cosas pueden ser un poco confuso. Si aún no lo sabe, establezca en su cabeza el hecho de que GAS (Google Apps Scripting) y GAE (Google App Engine) son dos cosas completamente diferentes. A pesar de que suenan igual, son tan similares como Java a JavaScript.
GAS son los scrips incrustados en Google Docs (que con suerte serán importados como módulos independientes en el futuro) que manejan cosas como validación y documentos dinámicos pero son mucho más poderosos que la mayoría de sospechosos (pueden hacer cosas como modificar/actualizar documentos externos y respuestas de correo electrónico automático). Tenga en cuenta que estos deben ser livianos porque se ejecutan en los servidores de Google. Si el script tarda demasiado en terminar, su ejecución se cortará prematuramente (busque en Google los límites). Eso significa que debe usar vanilla JS solamente (sin marcos como jQuery) y ajustes de rendimiento siempre que sea posible.
GAE, por el contrario, es como un servidor web (con una capa de base de datos disponible) que vive en algún lugar de la nube. Existe como una capa de middleware conveniente (y ya implementada) para empresas/intereses para crear aplicaciones personalizadas para hacer más trabajo pesado. Desafortunadamente, la API externa de la hoja de cálculo es demasiado limitada para lograr lo que estamos trabajando por sí misma, por lo que no es una opción.
de automatización a través de Google Apps de secuencias de comandos y disparadores basados en el tiempo
Este enfoque debe trabajo, sino que requiere un enfoque ligeramente hacker.
Abra el libro de trabajo que contiene sus hojas de informe. Haga clic en [Herramientas] -> [Editor de scripts ...]. Una vez allí, vaya a [Desencadenantes] -> [Desencadenadores del guión actual ...].
Si usted no tiene ningún activador presentes, agrega uno. Luego, debajo del menú desplegable 'Eventos', seleccione 'Basado en el tiempo'.
Bienvenido al mundo de los controladores de eventos del lado del servidor. Una de las mejores características que obtienes con los documentos basados en la nube es la capacidad de desencadenar trabajos cron directamente en tu documento. No es necesario middleware externo.
Si todavía no lo ha notado, no hay ningún disparador para 'Temporizador de mes'. Aquí es donde se vuelve hacky. Para evitar la falta de esta función, se requerirá que activemos el activador diariamente y usemos JavaScript para hacer coincidir la fecha actual con la fecha del día anterior.
[código irá aquí]
En primer lugar, viene la función que se apega al controlador de eventos de disparo de tiempo. Este bloque de código simplemente analiza la fecha, la compara con la fecha anterior y almacena el valor en una hoja oculta (que usamos como capa de persistencia) para la comparación del día siguiente. Si se cumple la condición de nuevo mes, se ejecuta el siguiente bloque de código.
[código irá aquí]
Suyo, obviamente, serán diferentes de la mía un poco, pero el concepto básico es:
- de carga en dicho objeto (que no debe confundirse con un objeto de hoja)
- Busque el objeto Hoja de plantilla
- Clone la Hoja de plantilla dándole un nombre basado en la fecha-rango apropiado
En el mío, mi siguiente paso será extraer datos del mes para generar un gráfico de líneas apiladas para informar el estado actual a mis superiores.
Nota: debido a la naturaleza de colaboración de usuarios múltiples de los documentos, los eventos tienen que activarse en el servidor. Esto crea un gran problema para nosotros. Debido a que el código del evento se ejecuta en otro lugar si el código falla, no obtenemos ningún comentario de nuestro navegador. La única solución para esto es configurar una notificación en el desencadenador para enviarle un correo electrónico de inmediato cuando el script falle.
Actualización: Mientras investigaba esto, encontré otra técnica genial. Si puedo lograr que esto funcione sin errores, podría intentar invocar el desencadenante usando una fecha marcada en Google Calendar.
@Priyank Bolia. No creo que entiendas Google Docs. No tengo una hoja de cálculo de Excel en absoluto. Solo tengo una hoja de cálculo de Google Docs. En esta hoja tengo una hoja de trabajo de la plantilla que me gustaría copiar, renombrar y luego editar. Me gustaría hacer esto programáticamente. – chollida
¿Cómo resolvió este problema? – Tyug
@Tyug No lo he resuelto. – chollida