Saltar al contenido

Cómo guardar datos .xlsx en un archivo como un blob

Te sugerimos que pruebes esta resolución en un entorno controlado antes de pasarlo a producción, saludos.

Solución:

Yo tenía el mismo problema que tú. Resulta que necesita convertir el archivo de datos de Excel en un ArrayBuffer.

var blob = new Blob([s2ab(atob(data))], 
    type: ''
);

href = URL.createObjectURL(blob);

El s2ab (string para array buffer) (que obtuve de https://github.com/SheetJS/js-xlsx/blob/master/README.md) es:

function s2ab(s) 
  var buf = new ArrayBuffer(s.length);
  var view = new Uint8Array(buf);
  for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
  return buf;

La respuesta anterior es correcta. Por favor, asegúrese de tener un string datos en base64 en la variable de datos sin ninguna prefix o cosas así, solo datos sin procesar.

Esto es lo que hice en el lado del servidor (asp.net mvc core):

string path = Path.Combine(folder, fileName);
Byte[] bytes = System.IO.File.ReadAllBytes(path);
string base64 = Convert.ToBase64String(bytes);

En el lado del cliente, hice el siguiente código:

const xhr = new XMLHttpRequest();

xhr.open("GET", url);
xhr.setRequestHeader("Content-Type", "text/plain");

xhr.onload = () => 
    var bin = atob(xhr.response);
    var ab = s2ab(bin); // from example above
    var blob = new Blob([ab],  type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;' );

    var link = document.createElement('a');
    link.href = window.URL.createObjectURL(blob);
    link.download = 'demo.xlsx';

    document.body.appendChild(link);

    link.click();

    document.body.removeChild(link);
;

xhr.send();

Y me funciona perfectamente.

Esto funciona a partir de: v0.14.0 de https://github.com/SheetJS/js-xlsx

/* generate array buffer */
var wbout = XLSX.write(wb, type:"array", bookType:'xlsx');
/* create data URL */
var url = URL.createObjectURL(new Blob([wbout], type: 'application/octet-stream'));
/* trigger download with chrome API */
chrome.downloads.download( url: url, filename: "testsheet.xlsx", saveAs: true );

Comentarios y valoraciones de la guía

Al final de la web puedes encontrar las explicaciones de otros programadores, tú asimismo tienes la habilidad insertar el tuyo si te apetece.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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