webentwicklung-frage-antwort-db.com.de

Große Excel-Dateien mit SheetJS/js-xlsx lesen?

Ich verwende dieses Paket: https://www.npmjs.com/package/xlsx

Ich kann jedoch einige sehr große Excel-Dateien haben, die 1 Million Zeilen enthalten könnten.

Ich habe mit 600 KB Zeilen getestet, was etwa 15 MB große Excel-Datei ist, und mein Code stürzt bereits auf localhost ab.

Gibt es einen Weg, um es zu streamen? Ich weiß, dass die Dokumentation sagt, dass sie keine Art von Streaming-API haben, aber es geht um Pufferung?

 var reader = new FileReader();
    reader.onload = evt => {
      const bstr = evt.target.result;
      const wb = XLSX.read(bstr, { type: "binary" });
      const wsname = wb.SheetNames[0];
      const ws = wb.Sheets[wsname];
      const data = XLSX.utils.sheet_to_json(ws, { header: "A", defval: "" });
      });
    };
    reader.readAsBinaryString(this.file);
9
chobo2

Als ich Daten aus einer sehr großen Excel-Datei (ca. 50 MB) lesen musste, konvertierte ich sie mit Excel Interop in das CSV-Backend. Dies dauert weniger als das Abrufen von Daten aus einer Excel-Datei. Dann holen Sie sich einfach die ersten n Zeilen über den Streamreader. Damit erhalten Sie die erforderlichen Daten für die Vorschau. Senden Sie dies zur Vorschau an das Frontend. Das würde ich tun.

1
Bibek Shah

Versuchen Sie, Stream-Reader zu verwenden

var fs = require('fs');
var XLSX = require('xlsx');
function process_RS(stream/*:ReadStream*/, cb/*:(wb:Workbook)=>void*/)/*:void*/{
var buffers = [];
stream.on('data', function(data) { buffers.Push(data); });
stream.on('end', function() {
var buffer = Buffer.concat(buffers);
var workbook = XLSX.read(buffer, {type:"buffer"});

/* DO SOMETHING WITH workbook IN THE CALLBACK */
cb(workbook);
1
Ranki