web-dev-qa-db-ja.com

SheetJS / js-xlsxで大きなExcelファイルを読んでいますか?

私はこのパッケージを使用しています: https://www.npmjs.com/package/xlsx

ただし、100万行を含む可能性のある非常に大きなExcelファイルをいくつか持つことができます。

約15MBのExcelファイルである600K行でテストしましたが、コードはローカルホストですでにクラッシュしています。

ストリーミングする場所はありますか?ドキュメントにはストリーミングAPIがないと書かれていますが、バッファリングについて説明していますか?

 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

非常に大きなExcelファイル(約50 mb)からデータを読み取る必要がある場合、Excel相互運用機能を使用してバックエンドでデータをcsvに変換しました。これは、Excelファイルからデータを取得するよりも時間がかかりません。次に、ストリームリーダーを介して最初のn行を取得します。これにより、プレビューに必要なデータが得られます。これをフロントエンドに送信してプレビューします。これが私がすることです。

2
Bibek Shah

ストリームリーダーを使用してみてください

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