Como exportar a Excel (.xls) con Google Apps Script

Desgraciadamente, hay muchos usuarios que no usan Google Spreadsheets sino hojas de Excel ( XLS ). Estos usuarios te exigirán que los datos que les pases estén en formato XLS, no querrán un link a un google spreadsheet ni usar Google Apps Script y generalmente, no será fácil hacerles cambiar de opinión.

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!

18 comentarios:

  1. Hola, muchas gracias me funciona el scrip pero en mi caso necesito que remplace el archivo creado anterior mente.

    ResponderEliminar
    Respuestas
    1. Hola, 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

      Eliminar
  2. Muchísimas gracias lo intentare a ver como me va.

    ResponderEliminar
  3. Buena tarde existe alguna forma que el archivo pase a .xlsm y la macro quede funcionando en excel.

    ResponderEliminar
    Respuestas
    1. No. 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

      Eliminar
  4. Buenos días! Hay alguna forma de exportar a excel pero solamente una hoja especifica? Intente agregandole la siguiente línea:

    + '&gid=' + sheet.getSheetId()

    Siendo la variable "sheet" un spreadsheet.getActiveSheet(). Pero sin embargo sigue exportandome el archivo entero

    ResponderEliminar
    Respuestas
    1. 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.

      Eliminar
  5. Hola, 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.
    Necesitarí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

    ResponderEliminar
    Respuestas
    1. 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!

      Eliminar
  6. Hola,
    En 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 ?

    ResponderEliminar
    Respuestas
    1. 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.

      Eliminar
  7. Hola, pregunta: es posible especificar la carpeta destino en mi propia computadora? No me doy cuenta en dónde se setea esa info.
    Desde ya muchas gracias

    ResponderEliminar
    Respuestas
    1. No. Hasta donde yo se no es posible.
      El 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!

      Eliminar
  8. 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
    Muchas Gracias

    ResponderEliminar
  9. 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.

    ResponderEliminar
    Respuestas
    1. gracias 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-----------------------
      var destination_id = ''; // colocar el id de la carpeta donde quieres guardar el archivo
      var destination = DriveApp.getFolderById(destination_id);


      destination.createFile(blob);

      Eliminar
  10. 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

    ResponderEliminar
    Respuestas
    1. Creo que lo que necesitas lo tienes aquí: https://www.tutorialesgoogleappscripts.com/2020/09/como-crear-triggers-con-google-apps-script.html

      Buena suerte

      Eliminar

Tal vez te interese