Estoy tratando de crear un archivo de Excel que se pueda descargar desde Firefox y Chrome desde un entorno Angular 2+. Lo tengo funcionando perfectamente en Firefox, pero todo lo que intento simplemente no funciona en Chrome: descarga el archivo pero cuando lo abre arroja un error: "Excel no puede abrir este archivo porque el formato o la extensión del archivo no es válido. .".
Intenté configurar mi tipo de respuesta de publicación como 'arrayBuffer' y luego crear un blob y luego descargarlo, sin éxito. Probé el tipo de respuesta como: 1) 'blob' 2) 'blob' como 'json' 3) 'blob' como 'blob'
y pasándolo a través de mi componente de esa manera. Nada parece funcionar en Chrome, aunque todo funciona en Firefox.
Estas son algunas de mis funciones que he usado para intentar que Chrome abra este Excel.
downloadBlob(data: Blob, fileName: string) { //output file name //detect whether the browser is IE/Edge or another browser if (window.navigator && window.navigator.msSaveOrOpenBlob) { //To IE or Edge browser, using msSaveorOpenBlob method to download file. window.navigator.msSaveOrOpenBlob(data, fileName); } else { //To another browser, create a tag to downlad file. const url = window.URL.createObjectURL(data); const a = document.createElement('a'); document.body.appendChild(a); a.setAttribute('style', 'display: none'); a.href = url; a.download = fileName; a.click(); window.URL.revokeObjectURL(url); a.remove(); } }
blobToFile(data: Blob, fileName: string) { const a = document.createElement('a'); document.body.appendChild(a); a.style.display = 'none'; const url = window.URL.createObjectURL(data); a.href = url; a.download = fileName; a.click(); window.URL.revokeObjectURL(url); }
downloadArray(data, fileName: string) { var blob = new window.Blob([data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}); window.URL = window.URL || window.webkitURL; var url = window.URL.createObjectURL(blob); window.location.href = url; }
Incluso intenté usar el complemento FileSaver.js para guardar mi blob con oneliner
saveAs('blob', 'filename');
pero todo no se lee cuando se abre desde Chrome. Cualquier sugerencia sería muy apreciada.
Considere eliminar revokeObjectURL()
. Esta prueba funciona y se descarga en Chrome: https://batman.dev/static/70844902/
function downloadBuffer(arrayBuffer, fileName) { const a = document.createElement('a') a.href = URL.createObjectURL(new Blob( [ arrayBuffer ], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' } )) a.download = fileName a.click() }