【问题标题】:how to read portion of large excel file to prevent browser crashing using filereader and xlsx如何使用 filereader 和 xlsx 读取大型 excel 文件的一部分以防止浏览器崩溃
【发布时间】:2020-06-18 20:31:04
【问题描述】:

我可以使用下面的代码和 FileReader 和 xlsx 包在前端读取/解析 excel 文件。但是,对于非常大的文件,这会使浏览器崩溃。我只需要阅读前几行,我怎样才能做到这一点?

工作代码

const xlsxParse = (file) => {
    var reader = new FileReader();
    reader.onload = function (e) {
        var data = e.target.result;
        let readedData = XLSX.read(data, { type: 'binary' });
        const wsname = readedData.SheetNames[0];
        const ws = readedData.Sheets[wsname];

        /* Convert array to json*/
        const dataParse = XLSX.utils.sheet_to_json(ws, { header: 1 });
    };
    reader.readAsBinaryString(file)
}

我尝试阅读前几行。不工作

const xlsxParse = (file) => {
    var reader = new FileReader();
    reader.onprogress = (e) => {
        var data = e.target.result;
        let readedData = XLSX.read(data, { type: 'binary' });
        if (readedData) {
            const wsname = readedData.SheetNames[0];
            const ws = readedData.Sheets[wsname];

            /* Convert array to json*/
            const dataParse = XLSX.utils.sheet_to_json(ws, { header: 1 });
            console.log('dataParse', dataParse)
            if (dataParse.length > 3) {
                reader.abort()
            }
        }
    reader.readAsBinaryString(file)
}



谢谢

【问题讨论】:

标签: javascript excel reactjs xlsx filereader


【解决方案1】:

这可以帮助你。基本上,sheetRows 代表读取前 n 行:

handleFile = (file /*:File*/) => {
    /* Boilerplate to set up FileReader */
    const reader = new FileReader();
    const rABS = !!reader.readAsBinaryString;
    reader.onload = e => {
      /* Parse data */
      const bstr = e.target.result;
      const wb = XLSX.read(bstr, { type: "binary", sheetRows: 100});
      /* Get first worksheet */
      const wsname = wb.SheetNames[0];
      const ws = wb.Sheets[wsname];
      /* Convert array of arrays */
      const data = XLSX.utils.sheet_to_json(ws);
      const tableColumns = Object.keys(data[0]);
      console.log('data', data);
    };
    if (rABS) reader.readAsBinaryString(file);
    else reader.readAsArrayBuffer(file);
};

【讨论】:

    猜你喜欢
    • 2016-12-02
    • 2016-03-10
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    相关资源
    最近更新 更多