我需要阅读excel文件,这是我使用一些库完成的。在这里,我获取用户选择的文件并将其传递给handleFile函数,此函数将excel数据转换为JSON数据。它工作正常。
var xlf = document.getElementById('xlf');
function handleFile(xlf) {
var files = xlf.files;
var f = files[0];
{
//some code
}
}
但是我的要求发生了变化,现在用户将上传包含excel文件列表的zip文件。从zip文件中我需要逐个读取excel文件及其数据。
使用zip.js库[https://gildas-lormeau.github.io/zip.js/demos/demo2.html]解压缩上传的文件。他们有一个给定的演示,因为如果我们上传zip文件,他们在屏幕上显示文件列表,并通过单击显示的文件,它将被下载。在他们的代码中,他们创建了Entry Object并向该对象添加了文件信息,如下所示
reader.readUint8Array(datalength, reader.size - datalength, function(bytes) {
var i, index = 0, entries = [], entry, filename, comment, data = getDataHelper(bytes.length, bytes);
for (i = 0; i < fileslength; i++) {
entry = new Entry();
entry._worker = worker;
if (data.view.getUint32(index) != 0x504b0102) {
onerror(ERR_BAD_FORMAT);
return;
}
readCommonHeader(entry, data, index + 6, true, onerror);
entry.commentLength = data.view.getUint16(index + 32, true);
entry.directory = ((data.view.getUint8(index + 38) & 0x10) == 0x10);
entry.offset = data.view.getUint32(index + 42, true);
filename = getString(data.array.subarray(index + 46, index + 46 + entry.filenameLength));
entry.filename = ((entry.bitFlag & 0x0800) === 0x0800) ? decodeUTF8(filename) : decodeASCII(filename);
if (!entry.directory && entry.filename.charAt(entry.filename.length - 1) == "/")
entry.directory = true;
comment = getString(data.array.subarray(index + 46 + entry.filenameLength + entry.extraFieldLength, index + 46
+ entry.filenameLength + entry.extraFieldLength + entry.commentLength));
entry.comment = ((entry.bitFlag & 0x0800) === 0x0800) ? decodeUTF8(comment) : decodeASCII(comment);
entries.push(entry);
index += 46 + entry.filenameLength + entry.extraFieldLength + entry.commentLength;
}
并在屏幕上显示文件列表时,它们如下所示
model.getEntries(fileInput.files[0], function(entries) {
fileList.innerHTML = "";
entries.forEach(function(entry) {
var li = document.createElement("li");
var a = document.createElement("a");
a.textContent = entry.filename;
a.href = "#";
a.addEventListener("click", function(event) {
if (!a.download) {
download(entry, li, a);
event.preventDefault();
return false;
}
}, false);
li.appendChild(a);
fileList.appendChild(li);
});
});
此处每个条目对象代表zip文件中的文件。这里我想调用handleFile方法来读取excel文件。但是handleFile()方法期待文件输入元素,但是从zip文件中我得到了入口对象。
当我将条目对象传递给handleFile方法时,它无效,请你帮我解决这个问题。
function handleFile(xlf) {
var files = xlf.files;
var f = files[0];
{
//some code
}