在javascript

时间:2016-06-29 17:00:09

标签: javascript jquery ajax excel zip.js

我需要阅读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
  }    

0 个答案:

没有答案