Para estas ocasiones nos puede resultar extremadamente útil poder exportar a formato XLS nuestras hojas de cálculo mediante Google Apps Script de una forma rápida y sencilla.
El código para poder realizar esta exportación se basa en el mismo principio que usamos para exportar PDF. Haremos una petición a un servicio de Google que nos permite exportar a diferentes formatos nuestras hojas de cálculo de Drive.
function Export() { var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var exportUrl = 'https://docs.google.com/spreadsheets/d/' + spreadsheet.getId() + '/export?exportFormat=xlsx&format=xlsx'; // Para exportar a formato XLS // + '/export?exportFormat=ods&format=ods'; // Para exportar a ODS //Hacemos la petición para pedir el fichero exportado var response = UrlFetchApp.fetch(exportUrl, { muteHttpExceptions: true, headers: { Authorization: 'Bearer ' + ScriptApp.getOAuthToken() } } ); //Creamos el fichero con el binario que nos devuelve la petición anterior var blob = response.getBlob(); blob = blob.setName(spreadsheet.getName()); var exportedFile = DriveApp.createFile(blob); SpreadsheetApp.getUi().alert(exportedFile.getUrl()); }
Como veréis tenéis el código para poder exportar a formato Excel(xls) y a formato OpenOffice (ods), con solo descomentar la linea que os interese tendréis suficiente.
La conversión puede tardar un rato, dado que el proceso interno de conversión puede ser bastante costoso, así que tranquilos si se demora un poco el proceso.
No vaciléis en hacerme llegar vuestras dudas
Nos vemos!
Hola, muchas gracias me funciona el scrip pero en mi caso necesito que remplace el archivo creado anterior mente.
ResponderEliminarHola, Lo mejor que puedes hacer es borrar el fichero que anteriormente se ha creado. Te dejo el link que te explica como borrar ficheros y carpetas con Google Apps Script: https://www.tutorialesgoogleappscripts.com/2020/11/como-borrar-ficheros-y-carpetas-con-google-apps-script.html
EliminarMuchísimas gracias lo intentare a ver como me va.
ResponderEliminarBuena tarde existe alguna forma que el archivo pase a .xlsm y la macro quede funcionando en excel.
ResponderEliminarNo. Las macros de Excel funcionan con un lenguaje diferente a los script de Google Apps Script. No es compatible, ni se parecen, así que no, lo que pides no es factible. Ahora bien, la gran pregunta es... realmente necesitas una macro en Excel teniendo Google Apps Script? :D
EliminarBuenos días! Hay alguna forma de exportar a excel pero solamente una hoja especifica? Intente agregandole la siguiente línea:
ResponderEliminar+ '&gid=' + sheet.getSheetId()
Siendo la variable "sheet" un spreadsheet.getActiveSheet(). Pero sin embargo sigue exportandome el archivo entero
Creo que si te miras este artículo te puede guiar en lo que quieres: https://www.tutorialesgoogleappscripts.com/2020/10/como-generar-un-pdf-de-hojas-seleccionadas-con-google-apps-script.html Si no te aclaras dímelo y le doy otro ojo.
EliminarHola, un amigo y yo hemos creado una google sheet, que además de fórmulas y macros granadas, hemos picado código manualmente para automatizar tareas y cálculos.
ResponderEliminarNecesitaríamos enviar esas sheets a varios miembros de un grupo para que editen celdas (sólo datos) pero evitando que puedan ver el código.
No somos programadores sino autodidactas y no hemos visto información al respecto/ejemplos en la red.
Es posible hacerlo? Gracias
Fácil no es, pero algo se puede hacer. En este artículo hablaba sobre el tema: https://www.tutorialesgoogleappscripts.com/2020/09/como-ocultar-codigo-google-script.html Espero q os sirva! Nos vemos!
EliminarHola,
ResponderEliminarEn mi caso, es al revés... Me encuentro que me llegan archivos de Excel y yo quiero trabajar con Sheets, por lo que necesitaría una automatización que me permitiera recoger los datos del Excel y importarlos a un Sheet.
Cómo puedo "llamar/copiar" una celda de un Excel ?
Exportar el Excel a un csv u otro formato y entonces importarlo a Spreadsheets, lo veo factible, pero atacar directamente a Excel desde Google Apps Script, hasta donde yo se, es imposible. Tal vez alguien haya conseguido algo, pero vamos , yo a ese nivel no he llegado.
EliminarHola, pregunta: es posible especificar la carpeta destino en mi propia computadora? No me doy cuenta en dónde se setea esa info.
ResponderEliminarDesde ya muchas gracias
No. Hasta donde yo se no es posible.
EliminarEl motivo es sencillo, desde GAS ( lenguaje de servidor) no tenemos acceso al PC. El código se ejecuta en el servidor no en nuestra computadora.
Sorry!
Buenisimo tu informacion como siempre asiduo lector, como haria mediante app script para en vez de exportar pueda importar de un archivo excel a una hoja del google.. tu ayuda amigo
ResponderEliminarMuchas Gracias
Hola, muchas gracias por tu articulo, era justo lo que estaba buscando. Consulta, existe alguna opcion de especificar la carpeta de Drive donde se debería guardar el xls? Veo que lo deja en la raíz pero todo mi proyecto está en otra carpeta y me gustaría trabajar todo junto. Muchas gracias nuevamente, un abrazo.
ResponderEliminargracias de antemano al creador de la funcion excelente era lo que necesitaba en cuanto a guardar el archivo excel creado en la carpeta q quieras . le hice una pequeña modificacion-----------------------
Eliminarvar destination_id = ''; // colocar el id de la carpeta donde quieres guardar el archivo
var destination = DriveApp.getFolderById(destination_id);
destination.createFile(blob);
Lo primero gracias por la información, me sirven de mucho tus posts. Yo necesitaría que esa misma exportación se hiciese de manera automática por ejemplo cada 5 minutos, o bien que se pudiese hacer cada vez que rellenan un formulario que acaba en una hoja de cálculo de Google Sheets. ¿es posible hacerlo? ¿podrías indicarme cómo hacerlo?. Gracias de antemano
ResponderEliminarCreo que lo que necesitas lo tienes aquí: https://www.tutorialesgoogleappscripts.com/2020/09/como-crear-triggers-con-google-apps-script.html
EliminarBuena suerte
Hola! Excelente contenido! Una consulta.. un usuario creo un sheet y me dio permisos de edicion. Hice el script como explicaste, pero cuando descarga el archivo, solo muestra informacion de que debo iniciar sesion, en vez de mostrar los datos del sheet. Que debo modificar para que aparezca la info en vez de ese mensaje?
ResponderEliminarHola yo tengo una duda con unos colegas hemos creado en sheets una tabla que esta completamente creada a puro html y manda a llamar unos datos, lo que necesito es descargar esta tabla en formato excel pero no encuentro la manera que lo haga
ResponderEliminarA ver si te entiendo, quieres descargar una tabla html en formato excel?
EliminarCorrecto
EliminarDudo que pueda hacerse facilmente. La unica forma que conozco seria pasarlo todo a un google sheet y entonces aplicar el script de este tutorial.
EliminarPasar una tabla html a un excel así sin más, me parece un proyecto demasiado grande ni tan siquiera para plantearselo ( tal vez haya algo hecho pero me extrañaria )
Siento no ser de más ayuda
Suerte!
Hola a todos, me parece muy interesante y útil el artículo, sin embargo tengo una inquietud inversa.
ResponderEliminarTengo un excel de poco mas de 5000 registros y 30 columnas. Deseo llevar todos estos datos a mi google sheets de manera diaria. No sobreescribir el archivo sino llevar todos los datos .
He visto algunos ejemplo que funcionan muy bien y que envían registro por registro, pero cuando son pocos los registros y columnas; sin embargo cuando ya son mas de 500 registros es lógico sea un proceso lento porque debe acceder al google drive tantas veces como registros existan.
Se les ocurre alguna mejor idea de poder llevar todos los registros de excel a google sheets?
A mi se me ocurre llevar en bloques o paquetes o Arrays. De esa manera podría llevar quizás 50 ó 100 o tal vez mas registros en una sola variable, lo que reduciría significativamente el acceso a google drive.
Mi duda o problema es que no se como recibir ese parámetro en apps scripts, en vba excel se puede asignar rango de datos a una variable arrays, pero no se como recibirla en scripts.
Por favor necesito de sus consejos, ayuda o asesoria de ser necesario.
Hola... no tengo muy claro como hacerlo pero yo lo intentaria mediante una web. Que el script sea una web que reciba una parametro y que ese parametro sea un json o algo parecido que te permita ponerle la info... No se, con muchos registros te dará problemas siempre en algún punto escojas la solución que escojas.
EliminarYa contarás como ha ido . has despertado mi curiosidad. :)