@JuanSGuzman y @@mozart_34 me han hecho retomar el amor por la programacion. Gracias por compartir sus conocimientos de manera tan simple y clara. Deberian hacer un canal juntos!
La verdad muy bien explicado muchas gracias por este gran aporte y tu paciencia y facilidad de explicar. Sigue siendo el mismo. Muchas gracias y mas todo en la nube de Google
Hola amigo, primer tutorial que veo tuyo y explicas todo super bien y facil. Ya de uno me subscribo a tu canal excelente trabajo y dedicacion. Estare viendo todos tus videos gracias nuevamente
Muy bien explicado, ya realice el ejercicio y funcionó bien. Y para agregar un menú con acceso para más paginas, es decir una con el formulario, otra para listar los datos que registramos con el formulario y asi hacer mas complejo el proyecto. Gracias de antemano.
Hola, gracias por el comment! Las web apps están diseñadas para proyectos pequeños y con un fin concreto, en la documentación recomiendan crear varias apps cada una con su propósito específico, lo que se me ocurre es que puedes insertar tu app en un Google site, ,ahí puedes logsmrsr ese objetivo, un menú, con tu app, y en otra página la lista de datos del form, espero te haya ayudado
@@mozart_34 gracias por tu respuesta , te comento estuve buscando por varios días en UA-cam y encontré algo similar o parecido a lo que te comentaba. Será que se puede implementar el Bootstrap y el css que explicas en ese tipo de código que aparece en el vídeo que anexo? ua-cam.com/video/xMIYGXLOBcM/v-deo.html
@@zlifer666 si claro si se puede, de acuerdo a los parámetros en el header puedes mostrar una página u otra. Incluso hasta con eventos puedes ocultar divs y hacer como si apareciera otra página. 😅 Depende de tus necesidades, gracias por compartir
@@mozart_34 gracias por comentar, intenté hacer lo de ocultar los div pero fue fallido , podrías considerar hacer un pequeño curso o tutorial de cómo emular que son varias páginas ocultando los div , te lo agradeceria mucho. Saludos.
No se si sirva a estas alturas pero yo logre algo similar con la clase nav nav-tabs en bootstrap. Me imagino que la nav te permite tambien crear divs como si fueran menus y ocultarlos.@@zlifer666
Muchas gracias por estos tutoriales tan perfectos. Me gustaría que lanzaras un tutorial donde los datos que se muestren en el formulario vengan de un hosting de mysql.
Hola, gracias por el comment! Espero pronto tener más tiempo para crear más contenido. Si me han pedido varias veces mostrar almacenamiento desde mysql
Muchas gracias Mozart por el video y la explicacion!!! Pude utilizarlo bien para un sistema de cobranzas para ingresar pagos, solo necesito generar recibos en pdf cuando se ingresa el pago, pero ya veré como jaja
Excelente Rafa, gracias por compartir cómo aplicaste esto en tu trabajo. En esta misma lista de reproducción tengo algunos videos para convertir tu archivo a pdf, creo que te serviría para ampliar esta funcionalidad. ✌
me quede en el 02:55 Añadiendo Bootstrap , no supe de donde salio esa pagina y los enlaces , tu voz me animo a seguir el tutorial jajaja ayuda , quiero terminar esta primera experiencia
Los enlaces son de la página de documentación de Bootstrap solo ponle en el navegador bootstrap 5.2 y en la instalación. En otros videos muestro desde como entrar a bootstrap.
Hola Juan! Te hago una consulta, por favor, ¿ sabes si hay forma de mandar datos con el metodo post sin usar un input u otra etiqueta de formulario..por ejemplo desde un o un ?
Hola, creo que sí, también con el método scrip.run se puede, en ocasiones lo que hago es en la función de javascript agrego el valor a un input o a un objeto que está oculto y con eso lo envío.
Muchas gracias esto realmente me ayudó. Traté de cambiar el campo de fecha a un campo selector de rango de fechas. Ya intente esto durante algunos días y estoy seguro de que es posible. ¿Podrías ayudarme?
Muchas gracias por tu ayuda, tengo una consulta, se puede subir una imagen para guardarla en una celda de nuestra sheet o en una carpeta de nuestro drive con un nombre esècificado y asociado a nuestro sheet...
Hola, sí, tal vez te pueda servir el video de correspondencia ua-cam.com/video/fUTNDkcT7DM/v-deo.html o el video o el de reportes ua-cam.com/video/7r26_IEK-dI/v-deo.html
Hola, he tomado como referncia el video para realizar un formulario. Todo muy bien pero luego q termina el proceso si presiono f5 o la pagina se actualiza me envia otra vez el formulario al sheet (inserta otra vez la fila). Alguna manera de solucinar este error. Gracias, excelente video.
Creo que podrías modificar la lógica del form, lo que pasa es que la función doPost al actualizarse queda con los e parameters, entonces podrías utilizar la función google script run para enviar los datos y utilizar el método withSuccessHandler y ahí resetear el formulario.
Hola! Muchas gracias por los videos, muy útiles! Te hago una consulta, cómo hacés para que cuando copias un bloque de código, al cambiar el value actualice lo que está linkeado. Veo en el video que se realice automáticamente en tu caso. Desde ya, mil gracias!
@@mozart_34 minuto 12.42, cambiás Colombia en "value" y ya se actualiza el valor a mostrar. Lo mismo ocurre con los otros países. Yo tuve que escribir el mismo texto las dos veces. Gracias!!
Mi buen saludo... estoy tratando de generar un formulario, pero con búsqueda. es decir, buscar un campo y que la búsqueda me regrese otro valor en otro campo a manera de validación un ejemplo para saber si el número de empleado ingresado existe... no se si tengas o pudieras hacer algo referente saludos y excelente contenido me ha ayudado mucho.
Hola, tal vez te puedan servir los videos 40 y 41 donde muestro validaciones en el cliente y en el server, puedes tomar cualquiera de los dos enfoques según tus necesidades.
Hola Mozart, como estas. Genial tu video! Muchas gracias! Te quería hacer una consulta. Es posible guardar en el Google sheet el contenido de un array generado en el javascript del lado del cliente usando GAS?? Desde ya gracias!
Hola, Mozart. Muchas gracias por los videos tutoriales, muy prácticos. Suscrito ya. Mira, todo bien con el envío de datos en la implementación de prueba (dev) y la final (exec). Sin embargo, cuando inserto en Google Site no puedo enviarlos. Atento a tu respuesta. De antemano, gracias. Saludos desde Chile!
@@jeanpabloramoscandia3985 chuta, sí hay videos en youtube, aunque en inglés. No guardé el video. Pero tuve q revisar el código q compartió en su blog para entender lo q hizo, porque el el video no está totalmente detallado así como explica Mozart. Y los toast los vi en otro tutorial.
@@llank igual he visto un monton de videos en inglés y he combinado un poco con el código de mozart, pero aún asi no logro hacerlo funcionar en Google Site, hasta logré que las repuestas del form sean enviadas como tabla html por correo, pero no logro dar con la solucion al problema en Site :(
Hola Mozart buenas tardes, tengo una pregunta: ¿Cómo hago para que una vez terminado el registro de los datos, este vuelva desde una opción nuevamente a la pagina para cargar más datos?
Muy bueno el video, gracias. Tengo una pregunta, como se puede hacer para que al dar enviar al formulario este simplemente limpie el formulario sin que sea enviado a otra pagina como la de su ejemplo. Que mi Dios lo bendiga.
Hola, gracias por la retro, regularmente si muestro todo 100% solo que este es un poco más avanzado y por tiempo lo obvié, si ves otros videos ahí viene
Hola @Mozart tienes algún trabajo en el que se use bootstrap en forma de tabla para visualizar datos de un googlesheet? y otra cosa. ¿como se te pueden hacer contribuciones en dinero?
Hola, si tengo varios, tal vez este te pueda servir ua-cam.com/video/lp1roQTehbg/v-deo.html Puedes apoyarme con un súper gracias en el icono que sale en mis videos o en mi cuenta de Buy me a coffe está en los comentarios 👍🏼
Buen video Mozart, felicitaciones!!, podrías hacer un video para autocompletar un formulario a partir del llenado de un campo único "por ejemplo la cedula".
Excelente video, con gustro tratare de implementarlo para mi area de trabajo, crees que este la posibilidad de agregar un buscar datos y evitar agregar datos duplicado?.. ya tengo las macros funcionando para esa parte nomas que mi duda es si puedo agregarlo tambien aqui al video que compartes Saludos
Hola, si claro, puedes hacer una validación previa y enviar una alerta en dado caso que el registro ya se encuentre. En uno de los Quick tips, "validaciones del lado del servidor" muestro como podrías hacer la validación.
Muy buena explicación, estan geniales los videos, Gracias Mozart!... Una consulta men, como se podria realizar la respuesta trigger de emall automatico de la informacion cargada en el sheets, como no provienen del onsubmit() que genera Forms, no encuentro la solucion, estoy jalando la data de form externo (Forms)a sheets mediante un POST. .. sin poder hacer ese trigger sin un edit manual...Gracias por tu atención.
Buenas tardes. muchas gracias por la informacion Estoy intentando agregar una fecha pero si pongo como: placeholder="Selecciona fecha de nacimiento"> no me respeta y me aparece dd/mm/aaaa Como puedo cambiar para que en lugar de dd/mm/aaaa, me aparesca Seleccionar fecha de nacimiento?
Me auto respondo y ti @DanielAlvarez-jp7fm para el futuro puedes usar : var fechaNacimientoRaw = e.parameter.fechaNacimiento; var fechaNacimiento = fechaNacimientoRaw ? fechaNacimientoRaw.split('-').reverse().join('/') : 'No especificado';
Estimado maestro. Junto con saludar, quisiera consultar un inconveniente que me pasa cuando inserto la app en un google sites, al momento de guardar el boton no realiza la operacion y queda el formulario en pantalla. No muestra el html de ingreso correcto, como si el boton no tuviera codigo asociado. ¿que podria pasar? De antemano te agradezco mucho tu ayuda?
Gracias, me suena a que no has creado una implementación con la última versión. si no, trata de utilizar el método google script run creo que es más fácil con apps script que con el boton dopost
Mozart muchas gracias por compartir tus conocimientos. Tengo una pregunta: el código así como está, copiando la URL, se puede pegar en un google site? o es necesario adicionarle algo más. Intenté pasar el formulario al site, aparentemente funciona, pero cundo le doy enviar, no pasa nada. Por otro lado, cuándo lo envío el formulario a otro usuario, al usuario le aparece que no tiene permiso de acceso...cómo podría solucionar estos ítems? Muchas gracias!
tenemos el mismo problema, yo quiero enviar los registros del formulario al google sheets y el botón no responde. Estoy viendo si me falta hacer algo más.
se hace asi, google por seguridad no recibe los parametros head de tu html, entonces lo fuerzas en la funcion doGet: especificamente esta linea, .setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); function doGet() { var template = HtmlService.createTemplateFromFile('registro'); template.pubUrl = 'tu ruta'; var output = template.evaluate() .setTitle('El nombre de tu pagina - Version 2.6 Ds') .addMetaTag('viewport', 'width=device-width, initial-scale=1') .setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); return output; }
@mozart_34 gran aporte. Implementé en un formulario personalizado todo lo que explicas en el video, y los datos son almacenados en el archivo de Google Sheet exitosamente, pero al finalizar el envió me muestra el siguiente mensaje "La secuencia de comandos se ha completado pero el valor que da no es un valor de retorno admitido". Tendrás conocimiento el porque de ese mensaje?
Hola, que bueno que te haya servido, tal vez en el valor de retorno que usas al terminar de hacer el registro, o en la función withSuccessHandler por ahí puede haber algo que no cheque
Hola, no es tanto programar el botón, es agregar una función del lado de apps Script, antes o después de agregar el registro realiza en envío de confirmación
En lugar de mostrar la segunda pantalla puedes utilizar el método .reset() para borrar los campos del formulario (obtienes el form por su id y lo limpias)
Gracias, ojo, las aplicaciones de apps Script se comparten a través de un link, en la esquina superior derecha tienes la opción de implementación hay que compartir un archivo .exec para recibir respuestas, también tienes que tener cuidado los permisos que asignas a la app para que lleguen los usuarios, por ejemplo, podría ser que se ejecute bajo tu nombre y que cualquier usuario pueda ver la app
Buenos dias, dsde ayer que estoy revisando y haciendo tu tutorial! la verdad que ha sido un exito hasta ahora, han surgido problemas pero son simplemente por algunos datos ingresados mal, o puesto en un orden que no corresponde pero ya esta trabajando, a esta utilidad la estoy usando para yo ingresar a mi propia planilla de sheet los datos de forma mas comoda, queria saber si hay alguna manera de colocar un boton de return/regresar/volver al formulario para seguir cargando. Desde ya un saludo enorme!
Hola, claro, para que una vez enviado vuelva a cargar el formulario en lugar de utilizar el método "doPost()" puedes utilizar el método google.script.run en el video de crear una app de 0 a 100 muestro ese método y así podrías cargar nuevamente el form y seguir con las capturas
@@mozart_34 exelente, ahora paso a revisarlo, y por ejemplo en el formulario o en la base de datos donde se carga el formulario tuvieramos una imagen, como puedo hacer la forma inversa para que al buscar desde un "numero/nombre" me devuelva una imagen, como podria hacerlo?
@@mozart_34 vi el video en donde se encuentra la linea de google-script-run, pero no he entendido como imcorporarla para que al cargar el formulario regrese para seguir cargando datos o me regrese hacia atras
@@braiansosa2119 es que no es que te regrese, una vez se envía el form y se reciben los datos, puedes limpiar el form y continuar con el siguiente registro
Hola, gracias por el video. ya he revisado y tratado de mil maneras pero siempre el resultado final es el siguiente al darle send "Sorry, unable to open the file at this time." solo con el link de prueba me deja enviar el reporte, que podria hacer?
@@mozart_34 Hola tocayo gracias por la respuesta, intente con dos cuentas diferentes una empresarial y una regular y se me presenta el mismo error, volví a escribir el código como unas 5 veces e igual, de verdad excelente video me has impulsado a tomar la decisión de convertirme en un programador, quiero linkearlo en un futuro con mis conocimientos Excel y power bi.
@@MedraCr Una vez generaste la implementacion y se te creo el link /exec.. tenes que reemplazar en el pubUrl el link dev por el exec, guarda los cambios. Luego vas a gestionar implementaciones, sobre la ultima implementacion vas al lapiz para editarla. En version, elegis version nueva y haces click en implementar. Esto hace que se guarden los cambios que estas ejecutando en el dev y no te cambie constantemente el link, y asi queda funcionando.
excelente mozart, te puedo hacer una consulta, tengo un modal donde me permite modificar info, cuando le doy guardar esta me guarda la info correctamente pero no me permite recargar la pagina desde gs, ni desde javascript, sabrias cual puede ser mi error....
Si a alguien le sale este error: TypeError: Cannot read properties of null (reading 'appendRow'), recuerde colocar el nombre 'Registro' a la hoja de sheets.
es una librería online (que también puedes descargar para trabajar en local) en cuanto pones en google te lo muestra, la instalas con una línea de css y una de script, como se muestra en el video. Saludos.
Holaaa, me han ayudado harto estos videos. Me ocurre un problema al crear un formulario que de inputs tiene dataLists, lo que pasa es que al evaluar lo que entrega el console.log(e) del metodo doPOST(), me aparece un arreglo sin parametros. Pero si yo evalúo el valor de los inputs antes de accionar el post, éstos si tienen su respectivo valor correspondiente al seleccionado en los dataList. Es como si el POST no captara el valor de mis elementos dentro del formulario. ¿Alguna idea?
Hola!! excelente explicación, no logro que se envíe el formulario. Revisé en las ejecuciones y no se ejecuta la función doPost. Al hacerlo manualmente me aparece el siguiente error: "12:32:51 Información undefined 12:32:51 Error TypeError: Cannot read property 'parameter' of undefined" ¿Cuál puede ser el problema? gracias!!!
@@mozart_34 Buen día. Me pasa lo mismo que a Ana, solo me registra en el sheet la fecha y hora pero no el nombre completo. Lo que noté es que despúes de escribir "e." no me da la palabra "parameter" como a ti en el vídeo. De hecho he revisado varias veces mi código vs el tuyo y no encuentro el error. 🙁
Hola, en el form utilizarías un input de tipo file. En el código del lado del servidor accederías a un folder de drive (por ejemplo con el método getFoldersByName() y crearías el archivo con el método createFile( archivoDelForm ). Pruébalo y si no tal vez estaría bien para el siguiente video 🤔
Hola muy buen video, solo tengo un problema, cuando llego a la parte de agregarle funcionalidad al formulario, sigo todos tus pasos y al ejecutar el formulario, darle click a enviar para probar q detiene el envio y marca los campos faltantes, no la hace se ve largo al envio, quisiera saber que podria ser
Hola, tal vez te sirva esta línea window . open( LA_DIRECCION_DE_TU_WEBAPP ,'_top'); o tal vez puedas simplemente borrar los campos del formulario para que se puedan hacer más registros. Si esta última te sirve en la próxima serie de videos mostraré como hacerlo.
excelente video! felicitaciones ya me suscribi a tu canal! me ayudan bastante tus videos, en esta ocacion quiero pedir por favor (si es q puedes claro si) que hagas un video teniendo como base el video actual ( Formulario de registro con Bootstrap) pero en el cual se pueda hacer una "busqueda, actualizacion y borrado" de los datos ingresados....o sea q se pueda ENVIAR INFO, BUSCAR LA INFO INGRESADA, MODIFICARLA (SI EL USUARIO QUIERE o algun dato lo ingreso mal) y borrarla si ya no quiere ir por ej, a algun curso
Muchas gracias por tus videos me haz ayudado bastante! Tengo una gran duda, como puedo hacer que la funcion doPost() no se ejecute o que los datos no se vuelvan a enviar al sheet al recargar la pagina saludos!
@@juanpalma2318 Sii, No utilice el metodo doPost en vez de eso cree una funcion que agregue los datos del formulario con appendRow con la condicion de que ya todas las preguntas tengan una respuesta
@@juanpalma2318 En mi casa si mal no recuerdo estaba utilizando esto para un boton que recargara la pagina, al final lo elimine y solo deje un mensaje que el usuario recargue la pagina, por otro lado no recuerdo muy bien pero deje esto en el codigo, tal vez te sirva pero no estoy muy seguro: function getScriptURL() { return ScriptApp.getService().getUrl(); }
Hola, ¿cómo haces para que no se visualice el mensaje de google "Otro usuario ha creado esta aplicación, no Google. Términos del Servicio" ?? Agradezco tu respuesta.
Hola qué tal, desde hace aproximadamente un año google agrego este mensaje a las aplicaciones que no están verificadas, no es posible quitar ese mensaje (no aparece porque estoy trabajando con la versión de prueba). La única manera que conozco para remover el mensaje es insertando la aplicación en un google site : ) espero sirva.
Buenas!!! Casi termino el proyecto.. me funciona bien todo, menos el return HTMLService con otro archivo html. Se puede hacer que una vez hecho el click en enviar vuelva a cargar el formulario en blanco en vez de otro html? porque lo intente pero me sale el error: ReferenceError: pubUrl is not defined (línea 45) ; pero si lo esta.. que puede ser?
Saludos excelente video me gustaria me ayudes con este error: TypeError: No se pueden leer las propiedades de null (leyendo 'getSheetByName') (línea 19, archivo "Código") Ya lo revise completo y lo comparé con el video uno a uno y no le veo error.
Hola, significa que no estás accediendo correctamente a la hoja de cálculo, por eso no encuentra la hoja con el nombre. Revisa el método openById( Aquí debe estar el id de tu hoja, debes tener permiso de edición a dicha hoja)
Hola Mozart, seguí tu video paso a paso y me fue bien en las pruebas, pero lo agregué a Google sites como parte de página web, me muestra el formulario pero no envía los datos a Google sheets y no logro resolver que lo envíe.
@@mozart_34 el URL si tiene la versión .exec Cuando lo inserto dentro del site no me funciona y cuando lo agrego con un boton y lo saca por enlace si funciona. Lo único que hice al insertarlo fue colocar la URL.exec pero me causa duda si debo hacer algo más cuando lo inserto.
@@mozart_34 fui al editor y revise que pasa cuando doy click en el enlace y cuando lo doy en site. El problema que veo en el site, es que solo ejecuta la función doGet y no ejecuta la función doPost, por eso no envía la información a la sheet. Considero que ya casi lo soluciono, pero ya no sé qué me hacer, si me podrías orientar me ayudarías mucho.
@@wiliamguerra9862 En ocasiones sites tiene algunas restricciones, y si intentas enviar la info al sheet con el metodo google script run en lugar del método doPost?
@@mozart_34 seguro es alguna restricción de Google sites, no he utilizado el otro método, pero lo buscaré para realizar la prueba, agradezco tu apoyo con este tema. Aprovecho para agradecer por el contenido que compartis, es muy bueno y en lo personal me ha ayudado mucho.
Buen día! tú video ha sido muy útil para un programa que estoy haciendo, combinando un formulario de este tipo con una API para crear ciertas instrucciones, pero tengo un problema que no siempre me sucede, y es que al enviar el formulario en ciertas ocasiones la función doPost se ejecuta 2 a 3 veces, lo que me está generando una duplicidad, hay que decir que cuando sucede no se recarga la página ni nada por el estilo, y el intervalo de ejecución es de 2 s aprox, siguiendo la documentación agregue un flush() al inicio de la función pero no estoy seguro si esto sea una solución, de antemano agradezco tus comentarios.
Hola, que bueno que te ha servido, loqnue pasa es que al utilizar el método doPost si aprietas dos veces el botón se hacen dos o más solicitudes, por eso llega más de una respuesta, podrías borrar un campo o desactivar el botón para que no se hagan más de un registro
@@mozart_34 Muchas gracias por tu respuesta, actualmente en el botón le tengo la animación de que cuando lo presionemos se ponga en modo cargando, hasta el momento lo que te comente de agregar la función flush() al inicio del método doPost me ha funcionado y solucionado este inconveniente, cualquier novedad que llegue a descubrir la comentaré , nuevamente gracias por tus videos y la ayuda!
@@mozart_34 Te cuento que hoy volví a tener el problema, por lo cuál la solución propuesta anteriormente del Flush() no fue efectiva, indagando un poco más concluyo que es por un tema de triggers falsos, los cuales al ver el registro de ejecución evidencio que es exactamente cada 2 minutos que me crea este trigger falso, sigo intentando recrear en un ambiente de pruebas el error, ya que no son todas las veces, y estoy intentando utilizar funciones asincrónicas como solución
Hola, excelente tu explicación, realice todo paso a paso pero me sale este error No se puede leer la propiedad 'getSheetByName' de null (línea 17, archivo "Código")
Muchas gracias 💪 es en la función doPost( e ) verdad? revisa una línea antes, lo más seguro es que no hayas almacenado correctamente el spreadsheet en la variable SS.
Hola, excelente video! tendrás algún ejemplo de este mismo formulario pero permitiendo adjuntar un archivo? el cual quede en el drive y se pueda previsualizar desde el GoogleSheet?
Hola como estas, excelente video acabo de realizar el mismo proceso pero me sale un error en el function doPost( e ){ cuando ejecuto me sale el error TypeError: Cannot read property 'appendRow' of null (línea 35, archivo "Código") me ayudaría por favor.. Gracias
hola amigo, si aun tienes el problema... tuve ese mismo problema. mi solución fue solo cambiar el nombre de la hoja en el sheet (ejm. decia hoja 1 y en el tutorial lo puso Registro -> "var sheetRegistro = SS.getSheetByName('Registro');" )
@@cliverjimnysoncoclavedias583 lo pude solucionar amigo, y como hago para que el link me quedé público y no pida acceso Google? Ya he cambiado los credenciales pero al momento enviar formulario sale acceso denegado
HOla, gracias por el video, logré construir todo, pero cuando hacemos el log me da este error: TypeError: No se pueden leer las propiedades de null (leyendo 'getSheetByName') (línea 21, archivo "Código")
Hola Mozart! Me encanto el video, me sirvió muchisimo! Te hago una consulta Yo agregue una columna en la que necesito que se coloque una breve descripcion cuando agrego a mi formulario el textarea, no me lo envia como parametro pero si lo hago como un input de texto normal, si lo envia cual puede ser el problema? en la consola me sale como type Error
Hola, solo tienes que agregar un input de tipo file, sería combinar este video con este otro ua-cam.com/video/AcRc8t88q6w/v-deo.html para subirlo a una carpeta de drive.
@@jhesicabedoya403 Sí es posible hacerlo con apps script, aunque si tienes pocos conocimientos de programación podrías tomar la foto y solo seleccionarla (ocuparías menos líneas de código) y todavía puedes usar app inventor o appsheet y ahi no necesitas escribir código.
Sí, es un framework que puedes descargar para trabajar en local o instalar en línea, la versión más actual creo que es la 5.4 solo busca bootstrap en google
depende como programaste las columas, boostrap es responsivo, usa este ejemplo y prueba yo tambien ajuste las columas asi a mi necesidad col-12 mb-3: .setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); function doGet() { var template = HtmlService.createTemplateFromFile('registro'); template.pubUrl = 'tu ruta'; var output = template.evaluate() .setTitle('El nombre de tu pagina ') .addMetaTag('viewport', 'width=device-width, initial-scale=1') .setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); return output; }
Estimado excelente aporte!, me salio todo bien, pero al hacer la prueba me indica que "Función de secuencia de comandos no encontrada: doPost". Espero me indiques cual fue el error?. Saludos
Tal vez no hayas escrito bien el nombre de la función doPost, o tal vez no lo hayas indicado en la parte del form. Conoces el evento onClick ? en lo personal me gusta más y creo que es un poco más simple, solo en este tutorial utilicé otra forma de hacerlo.
muy bueno, gracias...he tenido problemas con el bootstrap...al darle al botón implementar de prueba, no me muestra el formulario, solo el encabezado "Registro" he revisado el código y no hay errores, incluso lo compare y lo reemplace con el archivo tuyo...pienso que puede ser alguna tontería de la configuración de la implementación o algún permiso,...estoy varado ahí
esta genial! me funciono pero me da error en la carga de la plantilla de registro, me sale esto SyntaxError: Unexpected token '=' (línea 35, archivo "Código") pero en esa linea esta escrito textualmente: 35. return HtmlService.createTemplateFromFile("RegistroTerminado").evaluate(); tal como tu lo pones en el tutoria... que hice mal???
Hola, te marca esa línea porque ahí está el método .evaluate() ( que revisa el código html y si encuentra un error arroja el mensaje). Estoy casi seguro que viene de un scriptlet checa
¡Gracias!
Gracias por el support 🦾
@@mozart_34 no he podido echarla andar, copie tal cual pero no jala. Seguire intentando hasta que jale
Excelente contenido Mozart! Mis respetos! Mantén el gran trabajo con GAS!
Muchas gracias Juan! El respeto es mutuo y mi admiración a todo tu trabajo! "Soy tu fan" jeje ✌️
@JuanSGuzman y @@mozart_34 me han hecho retomar el amor por la programacion. Gracias por compartir sus conocimientos de manera tan simple y clara. Deberian hacer un canal juntos!
Me encanto. Muchas gracias por compartir tus conocimientos. Excelente contribución con el MUNDO.
Gracias, saludos ✌🏼
Excelente compañero, gracias por compartir tus conocimientos
Gracias! ✌🏼👨🏽💻
La verdad muy bien explicado muchas gracias por este gran aporte y tu paciencia y facilidad de explicar. Sigue siendo el mismo. Muchas gracias y mas todo en la nube de Google
Muchas gracias! 💪🏼👍🏼
Saludos
Aprendiendo del mejor! Gracias Mozart.
Muchas gracias Mario! espero puedas aplicar todo lo que aprendes! ✌🏼
Muchas gracias Morzat por compartir tus conocimientos...
Muy bien explicado. Muchas gracias por compartir el conocimiento. Y lo mejor, en español
Gracias!
Saludos! 🧑🏽💻☕
Como siempre, videos muy bien explicados y no son extensos. Gracial mil
Hola Luis, que bueno que le entendiste, saludos.
gracias por este tutorial. me ayudo a tener una mejor creatividad en un proyecto que estoy trabajando. Saludos...
Que bueno que te sirvió! Y gracias por comentar, me ayuda a vencer este algoritmo 😅✌🏽
Hola amigo, primer tutorial que veo tuyo y explicas todo super bien y facil. Ya de uno me subscribo a tu canal excelente trabajo y dedicacion. Estare viendo todos tus videos gracias nuevamente
Muchas gracias! ✌🏼 🧑🏽💻
Muy buen aporte. Bien explicado. Todo claro y ordenado. Gracias
Muchas gracias! 💪
Saludos! 👋
Muy bien explicado, ya realice el ejercicio y funcionó bien. Y para agregar un menú con acceso para más paginas, es decir una con el formulario, otra para listar los datos que registramos con el formulario y asi hacer mas complejo el proyecto. Gracias de antemano.
Hola, gracias por el comment! Las web apps están diseñadas para proyectos pequeños y con un fin concreto, en la documentación recomiendan crear varias apps cada una con su propósito específico, lo que se me ocurre es que puedes insertar tu app en un Google site, ,ahí puedes logsmrsr ese objetivo, un menú, con tu app, y en otra página la lista de datos del form, espero te haya ayudado
@@mozart_34 gracias por tu respuesta , te comento estuve buscando por varios días en UA-cam y encontré algo similar o parecido a lo que te comentaba. Será que se puede implementar el Bootstrap y el css que explicas en ese tipo de código que aparece en el vídeo que anexo?
ua-cam.com/video/xMIYGXLOBcM/v-deo.html
@@zlifer666 si claro si se puede, de acuerdo a los parámetros en el header puedes mostrar una página u otra. Incluso hasta con eventos puedes ocultar divs y hacer como si apareciera otra página. 😅 Depende de tus necesidades, gracias por compartir
@@mozart_34 gracias por comentar, intenté hacer lo de ocultar los div pero fue fallido , podrías considerar hacer un pequeño curso o tutorial de cómo emular que son varias páginas ocultando los div , te lo agradeceria mucho.
Saludos.
No se si sirva a estas alturas pero yo logre algo similar con la clase nav nav-tabs en bootstrap. Me imagino que la nav te permite tambien crear divs como si fueran menus y ocultarlos.@@zlifer666
Muchas gracias por estos tutoriales tan perfectos.
Me gustaría que lanzaras un tutorial donde los datos que se muestren en el formulario vengan de un hosting de mysql.
Hola, gracias por el comment!
Espero pronto tener más tiempo para crear más contenido. Si me han pedido varias veces mostrar almacenamiento desde mysql
Excelente aporte Mozart!!
Muchas gracias Mozart por el video y la explicacion!!! Pude utilizarlo bien para un sistema de cobranzas para ingresar pagos, solo necesito generar recibos en pdf cuando se ingresa el pago, pero ya veré como jaja
Excelente Rafa, gracias por compartir cómo aplicaste esto en tu trabajo. En esta misma lista de reproducción tengo algunos videos para convertir tu archivo a pdf, creo que te serviría para ampliar esta funcionalidad. ✌
me quede en el 02:55 Añadiendo Bootstrap , no supe de donde salio esa pagina y los enlaces , tu voz me animo a seguir el tutorial jajaja ayuda , quiero terminar esta primera experiencia
Los enlaces son de la página de documentación de Bootstrap solo ponle en el navegador bootstrap 5.2 y en la instalación. En otros videos muestro desde como entrar a bootstrap.
@@mozart_34 muchas gracias por tu orientación, te cuento si lo logre, deséame suerte 🍀
Hola Juan! Te hago una consulta, por favor, ¿ sabes si hay forma de mandar datos con el metodo post sin usar un input u otra etiqueta de formulario..por ejemplo desde un o un ?
Hola, creo que sí, también con el método scrip.run se puede, en ocasiones lo que hago es en la función de javascript agrego el valor a un input o a un objeto que está oculto y con eso lo envío.
Gran Turorial @Mozart!!! Muchas gracias por este aporte, te reto a realizar un tutorial pero para guardar en MySQL 😅
Hola, muchas gracias. Es algo que me han pedido bastante, esperemos más adelante :)
Muchas gracias esto realmente me ayudó.
Traté de cambiar el campo de fecha a un campo selector de rango de fechas. Ya intente esto durante algunos días y estoy seguro de que es posible. ¿Podrías ayudarme?
Muchas gracias por tu ayuda, tengo una consulta, se puede subir una imagen para guardarla en una celda de nuestra sheet o en una carpeta de nuestro drive con un nombre esècificado y asociado a nuestro sheet...
Hola, si claro que se puede, tal vez te sirva mi video de subir una imagen, y combinarlo con este video
Chingo Bro! me ayudo bastante =)
Saludos
Muy bien Explicado, me ayudo bastante Gracias, Saludos.
Que bueno que te sirvió, saludos!
Buen video Mozar, un añadido al formulario, es posible implementar images en el form con Url evidentemente?.
Saudos y tu 👍👍
Hola! me encanto! tendrías alguno para crear oficios? me emociona aprender más sobre estos temas
Hola, sí, tal vez te pueda servir el video de correspondencia ua-cam.com/video/fUTNDkcT7DM/v-deo.html o el video o el de reportes ua-cam.com/video/7r26_IEK-dI/v-deo.html
@@mozart_34 muy amable muchas gracias! Los veré! :D
Hola, he tomado como referncia el video para realizar un formulario. Todo muy bien pero luego q termina el proceso si presiono f5 o la pagina se actualiza me envia otra vez el formulario al sheet (inserta otra vez la fila). Alguna manera de solucinar este error. Gracias, excelente video.
Creo que podrías modificar la lógica del form, lo que pasa es que la función doPost al actualizarse queda con los e parameters, entonces podrías utilizar la función google script run para enviar los datos y utilizar el método withSuccessHandler y ahí resetear el formulario.
Hola! Muchas gracias por los videos, muy útiles!
Te hago una consulta, cómo hacés para que cuando copias un bloque de código, al cambiar el value actualice lo que está linkeado. Veo en el video que se realice automáticamente en tu caso.
Desde ya, mil gracias!
Hola, gracias por comentar :)
¿En qué parte del video? No sé exactamente en cual 😅
@@mozart_34 minuto 12.42, cambiás Colombia en "value" y ya se actualiza el valor a mostrar. Lo mismo ocurre con los otros países. Yo tuve que escribir el mismo texto las dos veces. Gracias!!
@@giseltrebotic4922 Ah ya, solo tienes que presionar alt en todas los lugares que quieres editar y aparecen 2 cursores y empiezas a escribir 😃
@@mozart_34 qué genio! muchísimas gracias =)
Muchas gracias por la informacion, como se haria para que al enviar los datos, la pagina cargue sin datos para introducir otros?
Hola, muchas gracias. Hay posibilidad de hacer que el formulario también muestre registros escritos previamente para editarlos?
Si claro también es posible por ahí tengo un video programado para la edición, espero pronto subirlo
x2
Excelente explicación
Hola, muchas gracias. Saludos! ✌️
Hola, como haces para testar la aplicacion html? Que comando usas?
Mi buen saludo... estoy tratando de generar un formulario, pero con búsqueda. es decir, buscar un campo y que la búsqueda me regrese otro valor en otro campo a manera de validación un ejemplo para saber si el número de empleado ingresado existe... no se si tengas o pudieras hacer algo referente saludos y excelente contenido me ha ayudado mucho.
Hola, tal vez te puedan servir los videos 40 y 41 donde muestro validaciones en el cliente y en el server, puedes tomar cualquiera de los dos enfoques según tus necesidades.
Hola buen día, tus videos son excelente, hay algún ejemplo de editar los campos?
@mozart_34 como se manejan los atributos no required, y el atributos name es obligatorio?
Hola Mozart, como estas. Genial tu video! Muchas gracias!
Te quería hacer una consulta.
Es posible guardar en el Google sheet el contenido de un array generado en el javascript del lado del cliente usando GAS??
Desde ya gracias!
Hola, claro que es posible, con el método setValues() agrega un array a la hoja
@@mozart_34 Muchas gracias por tu respuesta! Saludos
hey crack una pregunta, es posible hacer que ese formulario se vea como una interfaz grafica encima del sheets y no en otra pagina?
Hola, Mozart. Muchas gracias por los videos tutoriales, muy prácticos. Suscrito ya. Mira, todo bien con el envío de datos en la implementación de prueba (dev) y la final (exec). Sin embargo, cuando inserto en Google Site no puedo enviarlos. Atento a tu respuesta. De antemano, gracias. Saludos desde Chile!
Hola pudiste resolverlo?
@@jeanpabloramoscandia3985 usando condicionales y toast de bootstrap.
@@llank Me podrías apoyar con algun tutorial en la web? te lo agradecería mucho
@@jeanpabloramoscandia3985 chuta, sí hay videos en youtube, aunque en inglés. No guardé el video. Pero tuve q revisar el código q compartió en su blog para entender lo q hizo, porque el el video no está totalmente detallado así como explica Mozart. Y los toast los vi en otro tutorial.
@@llank igual he visto un monton de videos en inglés y he combinado un poco con el código de mozart, pero aún asi no logro hacerlo funcionar en Google Site, hasta logré que las repuestas del form sean enviadas como tabla html por correo, pero no logro dar con la solucion al problema en Site :(
Hola Mozart buenas tardes, tengo una pregunta: ¿Cómo hago para que una vez terminado el registro de los datos, este vuelva desde una opción nuevamente a la pagina para cargar más datos?
Muy bueno el video, gracias. Tengo una pregunta, como se puede hacer para que al dar enviar al formulario este simplemente limpie el formulario sin que sea enviado a otra pagina como la de su ejemplo. Que mi Dios lo bendiga.
Gracias, en lugar de mostrar la segunda pantalla puedes utilizar el método .reset() para borrar los campos del formulario
Hola, me gustaría que enseñara la opción de validar el registro para evitar duplicados
Hola, en este video muestro como hacer la validación: ua-cam.com/video/o7sCY4iNejI/v-deo.html puedes combinar ambos casos. Ojalá te sirva. ✌🏼
Gracias
Los videos estan muy bien pero, deberias agregar como ingresar a la pagina de boostrap y hallar esa parte de donde copias y pegas
Hola, gracias por la retro, regularmente si muestro todo 100% solo que este es un poco más avanzado y por tiempo lo obvié, si ves otros videos ahí viene
Hola @Mozart tienes algún trabajo en el que se use bootstrap en forma de tabla para visualizar datos de un googlesheet? y otra cosa. ¿como se te pueden hacer contribuciones en dinero?
Hola, si tengo varios, tal vez este te pueda servir ua-cam.com/video/lp1roQTehbg/v-deo.html
Puedes apoyarme con un súper gracias en el icono que sale en mis videos o en mi cuenta de Buy me a coffe está en los comentarios 👍🏼
Buen video Mozart, felicitaciones!!, podrías hacer un video para autocompletar un formulario a partir del llenado de un campo único "por ejemplo la cedula".
Gracias, qué información podríamos utilizar para autocompletar los campos a partir de una cédula?
Excelente video, con gustro tratare de implementarlo para mi area de trabajo, crees que este la posibilidad de agregar un buscar datos y evitar agregar datos duplicado?.. ya tengo las macros funcionando para esa parte nomas que mi duda es si puedo agregarlo tambien aqui al video que compartes
Saludos
Hola, si claro, puedes hacer una validación previa y enviar una alerta en dado caso que el registro ya se encuentre. En uno de los Quick tips, "validaciones del lado del servidor" muestro como podrías hacer la validación.
@@mozart_34 Muchas gracias!!.. Lo buscare para checar el dato. Saludos!!...
Cómo estás? quería saber de donde sacas la información de todas las funciones
Buen video 👍
Gracias! 👍🏼
Hola Mozart.
En que pagina web puedo sacar los estilos?
En la página oficial de bootstrap, solo ponle bootstrap (al momento de este comment, la versión más reciente es la 5.3)
Muy buena explicación, estan geniales los videos, Gracias Mozart!... Una consulta men, como se podria realizar la respuesta trigger de emall automatico de la informacion cargada en el sheets, como no provienen del onsubmit() que genera Forms, no encuentro la solucion, estoy jalando la data de form externo (Forms)a sheets mediante un POST. .. sin poder hacer ese trigger sin un edit manual...Gracias por tu atención.
Buenas tardes. muchas gracias por la informacion
Estoy intentando agregar una fecha pero si pongo como: placeholder="Selecciona fecha de nacimiento"> no me respeta y me aparece dd/mm/aaaa
Como puedo cambiar para que en lugar de dd/mm/aaaa, me aparesca Seleccionar fecha de nacimiento?
No se puede en boostrap solo usando date y un CND aparte
Me auto respondo y ti @DanielAlvarez-jp7fm para el futuro puedes usar :
var fechaNacimientoRaw = e.parameter.fechaNacimiento;
var fechaNacimiento = fechaNacimientoRaw ? fechaNacimientoRaw.split('-').reverse().join('/') : 'No especificado';
Estimado maestro. Junto con saludar, quisiera consultar un inconveniente que me pasa cuando inserto la app en un google sites, al momento de guardar el boton no realiza la operacion y queda el formulario en pantalla. No muestra el html de ingreso correcto, como si el boton no tuviera codigo asociado. ¿que podria pasar? De antemano te agradezco mucho tu ayuda?
Gracias, me suena a que no has creado una implementación con la última versión. si no, trata de utilizar el método google script run creo que es más fácil con apps script que con el boton dopost
Mozart muchas gracias por compartir tus conocimientos. Tengo una pregunta: el código así como está, copiando la URL, se puede pegar en un google site? o es necesario adicionarle algo más. Intenté pasar el formulario al site, aparentemente funciona, pero cundo le doy enviar, no pasa nada. Por otro lado, cuándo lo envío el formulario a otro usuario, al usuario le aparece que no tiene permiso de acceso...cómo podría solucionar estos ítems? Muchas gracias!
tenemos el mismo problema, yo quiero enviar los registros del formulario al google sheets y el botón no responde. Estoy viendo si me falta hacer algo más.
se hace asi, google por seguridad no recibe los parametros head de tu html, entonces lo fuerzas en la funcion doGet:
especificamente esta linea, .setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
function doGet() {
var template = HtmlService.createTemplateFromFile('registro');
template.pubUrl = 'tu ruta';
var output = template.evaluate()
.setTitle('El nombre de tu pagina - Version 2.6 Ds')
.addMetaTag('viewport', 'width=device-width, initial-scale=1')
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
return output;
}
@mozart_34 gran aporte. Implementé en un formulario personalizado todo lo que explicas en el video, y los datos son almacenados en el archivo de Google Sheet exitosamente, pero al finalizar el envió me muestra el siguiente mensaje "La secuencia de comandos se ha completado pero el valor que da no es un valor de retorno admitido". Tendrás conocimiento el porque de ese mensaje?
Hola, que bueno que te haya servido, tal vez en el valor de retorno que usas al terminar de hacer el registro, o en la función withSuccessHandler por ahí puede haber algo que no cheque
@@mozart_34 Gracías por responder tan pronto. Tenía el error en el return HtmlService, faltaban los paréntesis del .evaluate() 🤣
Hola Mozart, tengo una duda, como puedo programar el boton para que tambien envie un correo de confirmación? Gracias.
Hola, no es tanto programar el botón, es agregar una función del lado de apps Script, antes o después de agregar el registro realiza en envío de confirmación
hola Mozart, excelente video!!!! cómo podríamos evitar el FORM RESUBMISSION para no repetir registros?
Mozart como limpio todos los valores del bootstrap después de enviar. mil gracias.
En lugar de mostrar la segunda pantalla puedes utilizar el método .reset() para borrar los campos del formulario (obtienes el form por su id y lo limpias)
exelente video , solo tengo una consulta , como le hago paara que alguien más pueda respoder el formulario
Gracias, ojo, las aplicaciones de apps Script se comparten a través de un link, en la esquina superior derecha tienes la opción de implementación hay que compartir un archivo .exec para recibir respuestas, también tienes que tener cuidado los permisos que asignas a la app para que lleguen los usuarios, por ejemplo, podría ser que se ejecute bajo tu nombre y que cualquier usuario pueda ver la app
Buenos dias, dsde ayer que estoy revisando y haciendo tu tutorial! la verdad que ha sido un exito hasta ahora, han surgido problemas pero son simplemente por algunos datos ingresados mal, o puesto en un orden que no corresponde pero ya esta trabajando, a esta utilidad la estoy usando para yo ingresar a mi propia planilla de sheet los datos de forma mas comoda, queria saber si hay alguna manera de colocar un boton de return/regresar/volver al formulario para seguir cargando.
Desde ya un saludo enorme!
Hola, claro, para que una vez enviado vuelva a cargar el formulario en lugar de utilizar el método "doPost()" puedes utilizar el método google.script.run en el video de crear una app de 0 a 100 muestro ese método y así podrías cargar nuevamente el form y seguir con las capturas
@@mozart_34 exelente, ahora paso a revisarlo, y por ejemplo en el formulario o en la base de datos donde se carga el formulario tuvieramos una imagen, como puedo hacer la forma inversa para que al buscar desde un "numero/nombre" me devuelva una imagen, como podria hacerlo?
@@braiansosa2119 creo que en el video de cards y modals viene como cargar imágenes desde drive a la página
@@mozart_34 vi el video en donde se encuentra la linea de google-script-run, pero no he entendido como imcorporarla para que al cargar el formulario regrese para seguir cargando datos o me regrese hacia atras
@@braiansosa2119 es que no es que te regrese, una vez se envía el form y se reciben los datos, puedes limpiar el form y continuar con el siguiente registro
Hola, gracias por el video.
ya he revisado y tratado de mil maneras pero siempre el resultado final es el siguiente al darle send "Sorry, unable to open the file at this time."
solo con el link de prueba me deja enviar el reporte, que podria hacer?
Sorry por la demora, pudiste resolverlo? o intentaste hacerlo con otra cuenta? me suena a algo de los permisos de acceso al sheet o a la aplicación.
@@mozart_34 Hola tocayo gracias por la respuesta, intente con dos cuentas diferentes una empresarial y una regular y se me presenta el mismo error, volví a escribir el código como unas 5 veces e igual, de verdad excelente video me has impulsado a tomar la decisión de convertirme en un programador, quiero linkearlo en un futuro con mis conocimientos Excel y power bi.
Implementaste la app, que se comporte bajo tu cuenta y que pueda acceder cualquier usuario, incluso anónimo?
@@mozart_34 si señor!
Igual no funcionó
@@MedraCr Una vez generaste la implementacion y se te creo el link /exec.. tenes que reemplazar en el pubUrl el link dev por el exec, guarda los cambios. Luego vas a gestionar implementaciones, sobre la ultima implementacion vas al lapiz para editarla. En version, elegis version nueva y haces click en implementar. Esto hace que se guarden los cambios que estas ejecutando en el dev y no te cambie constantemente el link, y asi queda funcionando.
excelente mozart, te puedo hacer una consulta, tengo un modal donde me permite modificar info, cuando le doy guardar esta me guarda la info correctamente pero no me permite recargar la pagina desde gs, ni desde javascript, sabrias cual puede ser mi error....
Hola Mozart, excelente contenido, tengo una duda, esta sería la mejor opción para poder registrar la decisión "si o no" de una persona?
Saludos!
hola buenas tardes disculpa, como puedo poner botones de busqueda y de acualizacion de registro, muchas gracias
¡Mil gracias por el super contenido! ¿Cómo puedo hacer un campo de selección múltiple?
Podrías utilizar check, así pueden marcar varias opciones.
getbootstrap.com/docs/5.0/forms/checks-radios/
Si a alguien le sale este error: TypeError: Cannot read properties of null (reading 'appendRow'), recuerde colocar el nombre 'Registro' a la hoja de sheets.
dios lo bendiga buen hombre
Hols disculpa de donde sacas el framewor bootstrap
es una librería online (que también puedes descargar para trabajar en local) en cuanto pones en google te lo muestra, la instalas con una línea de css y una de script, como se muestra en el video.
Saludos.
Holaaa, me han ayudado harto estos videos. Me ocurre un problema al crear un formulario que de inputs tiene dataLists, lo que pasa es que al evaluar lo que entrega el console.log(e) del metodo doPOST(), me aparece un arreglo sin parametros. Pero si yo evalúo el valor de los inputs antes de accionar el post, éstos si tienen su respectivo valor correspondiente al seleccionado en los dataList. Es como si el POST no captara el valor de mis elementos dentro del formulario.
¿Alguna idea?
Hola Fabrizio, ya encontraste el motivo o una solución me sucede lo mismo.
Hola Fabrizio, prueba activar el envío de datos a través de un evento click en el botón que envíe los elementos del form, creo que es más sencillo.
Hola!! excelente explicación, no logro que se envíe el formulario. Revisé en las ejecuciones y no se ejecuta la función doPost. Al hacerlo manualmente me aparece el siguiente error:
"12:32:51
Información
undefined
12:32:51
Error
TypeError: Cannot read property 'parameter' of undefined"
¿Cuál puede ser el problema? gracias!!!
Hola, al parecer no estás pasando el objeto correctamente y por eso no puede leer el objeto, o tal vez algún error en el nombre de los parámetros.
@@mozart_34 Buen día.
Me pasa lo mismo que a Ana, solo me registra en el sheet la fecha y hora pero no el nombre completo. Lo que noté es que despúes de escribir "e." no me da la palabra "parameter" como a ti en el vídeo.
De hecho he revisado varias veces mi código vs el tuyo y no encuentro el error. 🙁
Como se podría hacer para adjuntar un archivo?
Hola, en el form utilizarías un input de tipo file. En el código del lado del servidor accederías a un folder de drive (por ejemplo con el método getFoldersByName() y crearías el archivo con el método createFile( archivoDelForm ). Pruébalo y si no tal vez estaría bien para el siguiente video 🤔
Hola muy buen video, solo tengo un problema, cuando llego a la parte de agregarle funcionalidad al formulario, sigo todos tus pasos y al ejecutar el formulario, darle click a enviar para probar q detiene el envio y marca los campos faltantes, no la hace se ve largo al envio, quisiera saber que podria ser
Para que recargue la apgina en vez de enviarte a otro lado como se hace?
Hola, tal vez te sirva esta línea window . open( LA_DIRECCION_DE_TU_WEBAPP ,'_top'); o tal vez puedas simplemente borrar los campos del formulario para que se puedan hacer más registros. Si esta última te sirve en la próxima serie de videos mostraré como hacerlo.
Disculpa como puedo hacer para que se pueda guardar una imagen
Hola, en el canal tengo 2 videos para subir imágenes, solo tienes que agregar esa parte del código al formulario, y listo ✌🏼
excelente video! felicitaciones ya me suscribi a tu canal! me ayudan bastante tus videos, en esta ocacion quiero pedir por favor (si es q puedes claro si) que hagas un video teniendo como base el video actual ( Formulario de registro con Bootstrap) pero en el cual se pueda hacer una "busqueda, actualizacion y borrado" de los datos ingresados....o sea q se pueda ENVIAR INFO, BUSCAR LA INFO INGRESADA, MODIFICARLA (SI EL USUARIO QUIERE o algun dato lo ingreso mal) y borrarla si ya no quiere ir por ej, a algun curso
😱 Estaría muy bien, tal vez un vídeo por cada actividad, uno para buscar, uno para editar y otro para borrar
@@mozart_34 SERIA EXCELENTE!!!! AGUARDO ESOS VIDEOS ANSIOSO!
Hola disculpa si me marca un error 403 al momento de rellenar todos los campos, que puedo hacer porque mi script si detecta las validaciones de Campos
Muchas gracias por tus videos me haz ayudado bastante!
Tengo una gran duda, como puedo hacer que la funcion doPost() no se ejecute o que los datos no se vuelvan a enviar al sheet al recargar la pagina
saludos!
tengo el mismo problema, lograste solucionarlo?
@@juanpalma2318 Sii, No utilice el metodo doPost en vez de eso cree una funcion que agregue los datos del formulario con appendRow con la condicion de que ya todas las preguntas tengan una respuesta
@@juanpalma2318 En mi casa si mal no recuerdo estaba utilizando esto para un boton que recargara la pagina, al final lo elimine y solo deje un mensaje que el usuario recargue la pagina, por otro lado no recuerdo muy bien pero deje esto en el codigo, tal vez te sirva pero no estoy muy seguro:
function getScriptURL() {
return ScriptApp.getService().getUrl();
}
Hola, ¿cómo haces para que no se visualice el mensaje de google "Otro usuario ha creado esta aplicación, no Google. Términos del Servicio" ?? Agradezco tu respuesta.
Hola qué tal, desde hace aproximadamente un año google agrego este mensaje a las aplicaciones que no están verificadas, no es posible quitar ese mensaje (no aparece porque estoy trabajando con la versión de prueba). La única manera que conozco para remover el mensaje es insertando la aplicación en un google site : ) espero sirva.
Gracias, funciono todo ok
Muchas gracias! 👋 saludos!
Excelente tutorial. Una pena que no esté disponible el código para evitar los errores de escritura de quienes como yo no somos programadores.
Saludos.
....ya lo encontré en el video siguiente ( cutt.ly/gmbSot8 ). Muy agradecido.
Buenas!!! Casi termino el proyecto.. me funciona bien todo, menos el return HTMLService con otro archivo html. Se puede hacer que una vez hecho el click en enviar vuelva a cargar el formulario en blanco en vez de otro html? porque lo intente pero me sale el error: ReferenceError: pubUrl is not defined (línea 45) ; pero si lo esta.. que puede ser?
Si claro si se puede hacer que limpie el form, en la función withSuccessHandler() es donde puedes limpiar el formulario
Saludos excelente video
me gustaria me ayudes con este error:
TypeError: No se pueden leer las propiedades de null (leyendo 'getSheetByName') (línea 19, archivo "Código")
Ya lo revise completo y lo comparé con el video uno a uno y no le veo error.
Hola, significa que no estás accediendo correctamente a la hoja de cálculo, por eso no encuentra la hoja con el nombre. Revisa el método openById( Aquí debe estar el id de tu hoja, debes tener permiso de edición a dicha hoja)
A mi me da el mismo error! 😪
Hola Mozart, seguí tu video paso a paso y me fue bien en las pruebas, pero lo agregué a Google sites como parte de página web, me muestra el formulario pero no envía los datos a Google sheets y no logro resolver que lo envíe.
Hola, si creaste una versión con la más reciente actualización e insertaste la versión .exec?
@@mozart_34 el URL si tiene la versión .exec
Cuando lo inserto dentro del site no me funciona y cuando lo agrego con un boton y lo saca por enlace si funciona.
Lo único que hice al insertarlo fue colocar la URL.exec pero me causa duda si debo hacer algo más cuando lo inserto.
@@mozart_34 fui al editor y revise que pasa cuando doy click en el enlace y cuando lo doy en site. El problema que veo en el site, es que solo ejecuta la función doGet y no ejecuta la función doPost, por eso no envía la información a la sheet.
Considero que ya casi lo soluciono, pero ya no sé qué me hacer, si me podrías orientar me ayudarías mucho.
@@wiliamguerra9862 En ocasiones sites tiene algunas restricciones, y si intentas enviar la info al sheet con el metodo google script run en lugar del método doPost?
@@mozart_34 seguro es alguna restricción de Google sites, no he utilizado el otro método, pero lo buscaré para realizar la prueba, agradezco tu apoyo con este tema.
Aprovecho para agradecer por el contenido que compartis, es muy bueno y en lo personal me ha ayudado mucho.
Buen día! tú video ha sido muy útil para un programa que estoy haciendo, combinando un formulario de este tipo con una API para crear ciertas instrucciones, pero tengo un problema que no siempre me sucede, y es que al enviar el formulario en ciertas ocasiones la función doPost se ejecuta 2 a 3 veces, lo que me está generando una duplicidad, hay que decir que cuando sucede no se recarga la página ni nada por el estilo, y el intervalo de ejecución es de 2 s aprox, siguiendo la documentación agregue un flush() al inicio de la función pero no estoy seguro si esto sea una solución, de antemano agradezco tus comentarios.
Hola, que bueno que te ha servido, loqnue pasa es que al utilizar el método doPost si aprietas dos veces el botón se hacen dos o más solicitudes, por eso llega más de una respuesta, podrías borrar un campo o desactivar el botón para que no se hagan más de un registro
@@mozart_34 Muchas gracias por tu respuesta, actualmente en el botón le tengo la animación de que cuando lo presionemos se ponga en modo cargando, hasta el momento lo que te comente de agregar la función flush() al inicio del método doPost me ha funcionado y solucionado este inconveniente, cualquier novedad que llegue a descubrir la comentaré , nuevamente gracias por tus videos y la ayuda!
@@brayandanilovelasquezjimen29 Si por fa, me avisas como te fue
@@mozart_34 Te cuento que hoy volví a tener el problema, por lo cuál la solución propuesta anteriormente del Flush() no fue efectiva, indagando un poco más concluyo que es por un tema de triggers falsos, los cuales al ver el registro de ejecución evidencio que es exactamente cada 2 minutos que me crea este trigger falso, sigo intentando recrear en un ambiente de pruebas el error, ya que no son todas las veces, y estoy intentando utilizar funciones asincrónicas como solución
Hola, excelente tu explicación, realice todo paso a paso pero me sale este error No se puede leer la propiedad 'getSheetByName' de null (línea 17, archivo "Código")
Muchas gracias 💪 es en la función doPost( e ) verdad? revisa una línea antes, lo más seguro es que no hayas almacenado correctamente el spreadsheet en la variable SS.
Hola, excelente video! tendrás algún ejemplo de este mismo formulario pero permitiendo adjuntar un archivo? el cual quede en el drive y se pueda previsualizar desde el GoogleSheet?
Muchas gracias, en el ejemplo junto no, pero en mi video FGAS 26 muestro como adjuntar un archivo y enviarlo a Drive, podrías combinarlo con este.
@@mozart_34 *FGAS 36 tks
Hola como estas, excelente video acabo de realizar el mismo proceso pero me sale un error en el function doPost( e ){ cuando ejecuto me sale el error
TypeError: Cannot read property 'appendRow' of null (línea 35, archivo "Código")
me ayudaría por favor.. Gracias
Gracias, el error debe estar donde accedes al Spreadsheet o al sheet, como no lo encuentra no puede utilizar el método agregar fila.
hola amigo, si aun tienes el problema... tuve ese mismo problema. mi solución fue solo cambiar el nombre de la hoja en el sheet (ejm. decia hoja 1 y en el tutorial lo puso Registro -> "var sheetRegistro = SS.getSheetByName('Registro');" )
@@cliverjimnysoncoclavedias583 lo pude solucionar amigo, y como hago para que el link me quedé público y no pida acceso Google? Ya he cambiado los credenciales pero al momento enviar formulario sale acceso denegado
@@cliverjimnysoncoclavedias583 Muchas gracias!!! No sabes de la que me salvaste, no encontraba como solucionar el error.
un crack
Gracias
Gracias, saludos
HOla, gracias por el video, logré construir todo, pero cuando hacemos el log me da este error: TypeError: No se pueden leer las propiedades de null (leyendo 'getSheetByName') (línea 21, archivo "Código")
Significa que el script no encuentra alguna hoja en el sheet con ese nombre. checa que esté bien escrito
Hola, lo resolviste?, siempre me devuelve null aunque el nombre sea correcto
Holaa a mi me dice "Se requiere autorización para realizar esa acción." que puedo hacer?
Hola, eso te sale al implementar la web app verdad? acepta para dar permisos al código. Si es ya al lanzar la app, revisa los permisos de acceso.
Hola Mozart! Me encanto el video, me sirvió muchisimo!
Te hago una consulta
Yo agregue una columna en la que necesito que se coloque una breve descripcion
cuando agrego a mi formulario el textarea, no me lo envia como parametro
pero si lo hago como un input de texto normal, si lo envia
cual puede ser el problema?
en la consola me sale como type Error
Hola, gracias, está raro. si imprimes el valor del textarea en la consola si lo imprime? El error te lo arroja en el cliente o en el servidor?
Si al formulario se le quiere agregar un campo de agregar foto. Como se puede hacer
Hola, solo tienes que agregar un input de tipo file, sería combinar este video con este otro ua-cam.com/video/AcRc8t88q6w/v-deo.html para subirlo a una carpeta de drive.
Hola, no se nada de programación, puedo desarrollar un registro y que este tenga un campo de tomar foto...
Se puede diligenciar desde en celular ?
@@jhesicabedoya403 Sí es posible hacerlo con apps script, aunque si tienes pocos conocimientos de programación podrías tomar la foto y solo seleccionarla (ocuparías menos líneas de código) y todavía puedes usar app inventor o appsheet y ahi no necesitas escribir código.
Hola!, me sale este error: SyntaxError: Invalid or unexpected token (línea 4, archivo "Código"). No puedo solucionario.
Hola, una consulta lo de bootstrap es una pagina online ?? Esque no me aparece la parte del framework para poder copiarlo y pegarlo
Sí, es un framework que puedes descargar para trabajar en local o instalar en línea, la versión más actual creo que es la 5.4 solo busca bootstrap en google
Excelente, Queria consultar si esta App se puede ejecutar desde celular android, gracias
depende como programaste las columas, boostrap es responsivo, usa este ejemplo y prueba yo tambien ajuste las columas asi a mi necesidad col-12 mb-3:
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
function doGet() {
var template = HtmlService.createTemplateFromFile('registro');
template.pubUrl = 'tu ruta';
var output = template.evaluate()
.setTitle('El nombre de tu pagina ')
.addMetaTag('viewport', 'width=device-width, initial-scale=1')
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
return output;
}
Buen video, pero tengo un problema no se estan pasando los datos, solo se registra la fcha
Tal vez no estés referenciando bien los nombres del objeto form. También revisa que si estés recibiendo los datos en tu archivo .gs
Estimado excelente aporte!, me salio todo bien, pero al hacer la prueba me indica que "Función de secuencia de comandos no encontrada: doPost". Espero me indiques cual fue el error?. Saludos
Tal vez no hayas escrito bien el nombre de la función doPost, o tal vez no lo hayas indicado en la parte del form. Conoces el evento onClick ? en lo personal me gusta más y creo que es un poco más simple, solo en este tutorial utilicé otra forma de hacerlo.
amigo sabes de formularios flotantes que salgan cuando hai un evento en un input
Los he visto igual con bootstrap, pero no los he utilizado, se ven muy bien. Tú los has utilizado?
muy bueno, gracias...he tenido problemas con el bootstrap...al darle al botón implementar de prueba, no me muestra el formulario, solo el encabezado "Registro" he revisado el código y no hay errores, incluso lo compare y lo reemplace con el archivo tuyo...pienso que puede ser alguna tontería de la configuración de la implementación o algún permiso,...estoy varado ahí
Prueba creando una nueva implementación, tal vez estás ejecutando un prueba vieja de tu código
Todo muy bien pero me sale este error TypeError: Cannot read property 'getSheetByName' of null y no se como solucionarlo
esta genial! me funciono pero me da error en la carga de la plantilla de registro, me sale esto SyntaxError: Unexpected token '=' (línea 35, archivo "Código") pero en esa linea esta escrito textualmente: 35. return HtmlService.createTemplateFromFile("RegistroTerminado").evaluate(); tal como tu lo pones en el tutoria... que hice mal???
Hola, te marca esa línea porque ahí está el método .evaluate() ( que revisa el código html y si encuentra un error arroja el mensaje).
Estoy casi seguro que viene de un scriptlet checa
Hola. Cómo puedo hacer un formulario para controlar la edición de una hoja de google sheets?
Hola, no entiendo muy bien, el formulario es para controlar que se va editar y que no? o para ingresar info?
para edicion de los datos existentes@@mozart_34
Y como despliega la app de boostrap ?