使用SheetJS / js-xlsx读取大型Excel文件?

时间:2018-07-26 21:21:28

标签: javascript excel streaming filereader xlsx

我正在使用此软件包:https://www.npmjs.com/package/xlsx

但是我可以拥有一些非常大的ex​​cel文件,其中可能包含100万行。

我测试了600K行,这大约是15mb的excel文件,我的代码已经在本地主机上崩溃了。

有没有可以串流的内容?我知道文档说他们没有任何流式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);

2 个答案:

答案 0 :(得分:2)

当我不得不从一个很大的excel文件(大约50 mb)中读取数据时,我使用Excel Interop将其转换为后端的csv,这比从Excel文件中获取数据要花费更短的时间。然后,只需通过流读取器获取前n行。这将为您提供预览所需的数据。发送到前端进行预览。这就是我要做的。

答案 1 :(得分:1)

尝试使用流阅读器

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