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);
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.
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);