我正在尝试解析用户指定的目录中的所有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 库的文件对象来解析excel文件?
答案 0 :(得分:4)
对于那些可能好奇的人,我想出了一个解决方案。
为了动态创建给定 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();
});