繁体   English   中英

使用js-xlsx解析Excel工作表

[英]Parsing Excel sheet with js-xlsx

我试图解析用户指定的目录中的所有excel文件,但我使用的js-xlsx库似乎需要手动导航。

var url = "/test-files/test.xlsx"; <-------- Located in the project directory
var oReq = new XMLHttpRequest();
oReq.open("GET", url, true);
oReq.responseType = "arraybuffer";

oReq.onload = function(e) {
    var arraybuffer = oReq.response;

    var data = new Uint8Array(arraybuffer);
    var arr = new Array();
    for (var i = 0; i != data.length; i++) arr[i] = String.fromCharCode(data[i]);
    var bstr = arr.join("");

    var workbook = XLSX.read(bstr, {
        type: "binary"
    });
}

oReq.send();

代码需要是动态的,因为它可以在任何地方打开excel文件。

有什么办法可以使用带有js-xlsx库的fileentry对象来解析excel文件吗?

对于那些可能很好奇的人,我想出了一个解决方案。

为了动态创建给定fileEntry对象的路径,必须先将其转换为Blob:

fileEntryObject.file(function(file) {});

然后将其转换为window.URL ,这样您的项目可以访问所需文件的可读路径:

var newPath = window.URL.createObjectURL(file);

因此,即使您不知道如何从项目导航到文件,也可以像在函数中使用常规路径一样使用它:

fileEntryObject.file(function(file) {
        var newPath = window.URL.createObjectURL(file);
        var oReq = new XMLHttpRequest();
        oReq.open("GET", newPath, true);
        oReq.responseType = "arraybuffer";
            oReq.onError = function(e) {
            console.log('Error in reading excel file');
        };
            oReq.onload = function(e) {
            var arraybuffer = oReq.response;
            var data = new Uint8Array(arraybuffer);
            var arr = new Array();
            for (var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]);
            var bstr = arr.join("");
                var workbook = XLSX.read(bstr, {
                type: "binary"
            });

            var sheet_name = workbook.SheetNames[1];
            var worksheet = workbook.Sheets[sheet_name];
                self.parseReceive(worksheet, callback);
            // self.parseReceive(worksheet);
        };
    oReq.send();
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM