@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
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 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...
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, 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.
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
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. ✌
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.
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
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 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 RU-vid 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? ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-xMIYGXLOBcM.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
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! 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!!
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?
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?
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.
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.
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
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, 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
@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, en este video muestro como hacer la validación: ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-o7sCY4iNejI.html puedes combinar ambos casos. Ojalá te sirva. ✌🏼
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 ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-lp1roQTehbg.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 👍🏼
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.
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.
Hay muchas personas aqui en el mismo problema, no guarda los datos, ya le he dado mil vueltas a esto y no los guarda. Hay forma de que nos puedas comentar que debemos revisar, la verdad es tedioso repasar varias veces las cosas y ver que no se soluciona nada, en verdad me gustaria que quedara igual que el video.
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
Si me funcionó pero cuando lo incorporo al Google Site no me manda la información, se queda en la parte de las palomitas verdes y no me arroja la segunda ventana, sabes que se puede hacer?
Hola, por experiencia he visto que cuando vas a insertar una web app en un site es mejor utilizar el método google script run en lugar de doPost() como en este video y no mostrar otra "página" sino tal vez limpiar los campos, ya que en un site tiene su propia página
Hola.... Cuando doy a enviar me aparece lo siguiente "No se encontro la función de la secuencia de comandos: dopost" Me podrias o me podrian ayudar, no se a que se debe
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';
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; }
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, 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 :(
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, sí, tal vez te pueda servir el video de correspondencia ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-fUTNDkcT7DM.html o el video o el de reportes ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-7r26_IEK-dI.html
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.
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
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".
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")
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; }
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 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 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
Soy nuevo en esto Hoce todo igual pero no me funciona ña función doPods, sl enviar los datos del formulario me dice que: la función doPosto monha sido encuentrada. Alguien me puede compartir la solución. De antemano muchas gracias
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 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.
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)
La parte final me sigue arrojando La secuencia de comandos se ha completado pero no ha dado ningún valor. en vez de mi mensaje personalizado del output2. Alguien me puede ayudar Registro SE HA REGISTRADO SU SOLICITUD.
Gran vídeo, felicidades. Logré el 99% de lo que hiciste, pero desafortunadamente no pude capturar algunos datos en el formulario cuando el usuario ingresa los datos. No se capturan los siguientes datos: [País, nivel de estudios y “Acepto la política de privacidad”] Intenté revisar los códigos y el video varias veces, pero no veo la razón por la cual el servicio de registros de Google no captura esta información. ¿Puede alguien ayudarme por favor?
Hola, gracias por el comment, tal vez al modificar el número de campos se te está pasando uno para agregarlo al sheet. Se me hace más fácil con el método google script run como muestro en algunos otros videos.
@@mozart_34 Gracias por responderme. No entiendo cómo funciona este método de ejecución de scripts de Google, todavía soy principiante, así que presto mucha atención al contenido de los videos y copio todos los comandos haciendo ajustes a mis necesidades. ¿Sería posible que me ayudaran a identificar el error si les envío el código?
Saludos. He seguido paso a paso todas tus instrucciones sin embargo no me funciona ninguna funcion a que se debera, hay que instalar algo antes de comenzar este tipo de proyectos?
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í
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!! 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, 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.
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.
Hola Mozart gran trabajo, muchas gracias!! He realizado el formulario en repetidas ocasiones, al realizar la primera prueba, y dirigirme a los registros solo me carga lo siguiente: Depuración { contentLength: 0, parameters: {}, contextPath: '', parameter: {}, queryString: '' } No me muestra los datos que digite en el formulario, me puedes indicar el error o algún indicio de que me pueda estar faltando? muchas gracias!!
Hola, gracias. Por lo que veo no estás enviando el form al servidor, puedes hacer un console antes de la función google.script.run para ver si si es el mismo objeto. Después haz el console en el archivo gs a ver si si lo estás recibiendo.
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 buenas tardes disculpa como podre contactarte para que me puedas hacer un trabajo como el que muestra aquí que me parece excelente, claro para ponernos de acuerdo
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, pero si se registran si lo haces sin insertar en el google site? si es así, lo más seguro es que te falte crear una nueva versión para que se vean reflejados los cambios
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?
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, 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.
Hola, solo tienes que agregar un input de tipo file, sería combinar este video con este otro ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-AcRc8t88q6w.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.