SheetJs agregar datos a archivo de excel existente desde Angular


Al trabajar con datos, registros, listas, muchas veces nos solicitan poder descargarlos en Excel, la librería https://sheetjs.com/ nos permite crear y manipular archivos de Excel desde el navegador o un servidor, es decir se puede usar tanto en proyectos Angular como en Node.

Su instalación es sencilla con NPM

También hay otras formas de instalar en la página oficial:
https://docs.sheetjs.com/docs/getting-started/installation/frameworks

Luego podemos importarlo en nuestro proyecto:

O si solo lo necesitas en un método en específico, cargarlo en una variable:

 

Esta librería nos permite convertir datos, array, objetos json a una hoja de Excel listos para convertir en archivo y descargarlo. Así como también nos permite leer archivos en Excel y poder manipularlos.

Lo que se complica es la parte de lectura desde archivos locales del proyecto, supongamos que tengas una plantilla con títulos y solo quieras “llenarla” con los datos.

Ejemplo que tengas una ruta «assets/misplantillas/reporte.xlsx»

Primero el navegador no permite acceder a rutas locales, incluso aparecerá un error «_fs.readFileSync is not a function», donde los métodos para acceder archivos no pueden realizar la acción. En node no habría problemas porque se ejecutaría desde el lado del servidor.

Segundo para estos casos la página oficial recomienda es cargarlo por petición HTTP, acceder por la ruta URL como si fuese un elemento externo y luego leer el archivo en binario para luego pasarlo al lector de archivos de Excel. Nos obliga a realizar más pasos, pero no hay otra alternativa.

 

Ejemplo comentando del proceso, un servicio «ExcelDownloadService»:

En las opciones coloqué «{ skipHeader:true, origin: «A3» });» porque automáticamente se toma los atributos del Json como columnas título, para ello el skipHeader y origin que comenzara en Fila A3 porqué en mi plantilla tengo dos títulos:

[ Reporte Principal ]
[Sección 1][ Sección 2 ][ Sección 3 ]
[datos][datos][datos][datos][datos]

Así que debes modificar las opciones según lo que requieras.

También he visto que se puede usar con archivos Excel cargados en un formulario, donde el archivo se obtiene directamente y no tendrías que leer el archivo local pero eso ya son otros casos y otros procesos.

Nota: Esta librería es la versión comunity y no permite el uso de estilos “negritas”, “centrar celdas”, etc. Incluso si el template tiene estilos, se borrarían. Para poder usar estilos te piden que compres la versión PRO, también podrías usar alguna de las alternativas basadas en Forks donde le incluyen una parte de estilos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *