Tengo un ArrayBuffer (de un archivo de Excel) en mi aplicación de JavaScript, que necesito ofrecer como un archivo de Excel descargable con un clic de botón. Generé el Arraybuffer usando la biblioteca excel4node. Intenté lo siguiente:
let element = document.createElement('a'); let excelBuffer = await fetchService.getBuffer(); let excelString = String.fromCharCode(...excelBuffer.data); console.log(excelString); element.setAttribute('href', 'application/vnd.ms-excel;charset=utf-8,' + encodeURIComponent(excelString)); element.setAttribute('download', 'dataFile.xlsx'); element.style.display = 'none'; shadowRoot.appendChild(element); element.click(); shadowRoot.removeChild(element);Este código se ejecuta al hacer clic en un botón. Pero esto no parece funcionar. Obtengo errores de URI con formato incorrecto o el navegador intenta abrir una nueva URL que dice "aplicación/bloqueada". Registrar la excelString convertida usando String.fromCharCode registra algunos símbolos extraños. Llegué a saber que este método usa la codificación UTF-16 para la conversión, pero el ArrayBuffer parece estar codificado en utf-8. También probé esto que no funcionó:
var blob = new Blob([excelBuffer.data], {type: "application/vnd.ms-excel"}); element.setAttribute('href', 'application/vnd.ms-excel;charset=utf-8,' + blob); element.setAttribute('download','dataFile.xlsx');¿Cómo hago que esto funcione?