Tengo un punto final que recupera un objeto json como el siguiente:
"data": [ { "id": 1, "temaIndicador": "Indian", "codigo": "001", "observaciones": "Interactions Specialist tertiary Regional Tennessee", "activo": "SI", "urlImagen": "http://placeimg.com/640/480", "color": "cyan", "createdAt": "2022-01-26T18:48:36.002Z" ]Y quiero implementar un botón que permita al usuario exportar los datos a múltiples formatos, incluido Excel (.xlsx), pero realmente no sé por dónde empezar. Ya he visto bibliotecas que se dan cuenta de esto, pero no me siento cómodo porque normalmente tienen menos de 1,500 descargas por semana.
Mi propósito es exportar un documento de Excel con una tabla simple donde los encabezados serán los atributos de los objetos.
Use la biblioteca de terceros xlsx.
npm install xlsxUsando la biblioteca:
import XLSX from "xlsx";Desencadenar la función de descarga al hacer clic en el botón (pasar datos como argumento):
downloadExcel = (data) => { const worksheet = XLSX.utils.json_to_sheet(data); const workbook = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(workbook, worksheet, "Sheet1"); //let buffer = XLSX.write(workbook, { bookType: "xlsx", type: "buffer" }); //XLSX.write(workbook, { bookType: "xlsx", type: "binary" }); XLSX.writeFile(workbook, "DataSheet.xlsx"); }; Botón de descarga: (llamada de función: debe modificarlo según sus requisitos, debajo de uno está la implementación del componente de clase React, es por eso que usé this )
<button onClick={()=>this.downloadExcel(data)}> Download As Excel </button>Según la respuesta aceptada, en caso de que alguien reciba el error "Intento de error de importación: 'xlsx' no contiene una exportación predeterminada (importado como 'XLSX')", intente importar usando lo siguiente:
import * as XLSX from 'xlsx';Espero eso ayude.