0

所以我有这个应用程序,我使用 FileUploader 上传 csv 文件。但是现在我的要求是也允许 excel 文件。问题是 FileUploader 在读取垃圾时不支持 excel。这是我基于此示例http://oss.sheetjs.com/js-xlsx/解析 excel 文件的尝试

代码:

        var fileUpload = this.getView().byId("fileUploader");
        var domRef = fileUpload.getFocusDomRef();
        var file = domRef.files[0];
        var XLSX = new ExcelPlus();
        XLSX.createFile(["CT_MAIN"]);

        var reader = new FileReader();

        reader.onload = function(e) {
            var strCSV = e.target.result;
            var arr = String.fromCharCode.apply(null, new 
            Uint8Array(strCSV));

          //  var arr = fixData(strCSV);

            console.log('data');
            console.log(arr);

            var workbook = XLSX.read(arr, {type : 'base64'});
             console.log('output');
             console.log(workbook);

            //var output = toCsv(workbook); 
            //each one of the rows in the csv file
            //var rows = arr;//strCSV.split("\n");
            var rows = arr.split("\n");
            ..... 

        };

        //reader.readAsText(file);
        reader.readAsArrayBuffer(file);
          //reader.readAsBinaryString(file);

如果我使用此代码上传 csv 文件,一切正常。如果我使用 excel 文件,我会得到以下信息

[1][Content_Types].xml ¢ [1]( [1]¬”ËNÃ0E÷HüCä-Jܲ@5í,Ç Q>Àēƪc[žiiÿž‰ûB¡ j7± ÏÜ{2ñÍh²nm¶,ˆÆ»R‹ÈÀU^ 7/ÅÇì%¿'rZYï @1__f›~q·ÃR4DáAJ¬h >€ãÚÇV ßƹ ªZ¨9ÈÛÁàNVÞ 8Ê©ÓãÑ Ôji){^óã-I‹"{Üv^¥P!XS)bR¹rú—K¾s(¸3Õ` c[1]Þ0†½ ÝÎß»¾7 M4²©ŠôªZÆk+¿|\|z¿(Ž‹ôPúº6 h_-[ž@!,ÒØPk‹´¬2nÏ}Ä? £LËð Ýû%á ÄßdºždN"m,à¥ÇžDO97 ‚~§Èɸ8ÀOíc |n¦Ñä Eøÿ ö éºóÀBÉÀ!$}‡íàÈé;{ìÐå[ƒîñ–é2þÿÿ

我做错了什么,或者我在这里错过了什么?

编辑:在做 var workbook = XLSX.read(arr, {type : 'base64'}); 两种文件类型都为空。以上垃圾日志来自console.log(arr);

4

1 回答 1

1

由于您从 domRef 获取文件,因此不需要 ExcelPlus。您只需要使用 xlsx 将文件作为二进制字符串读取。您必须在脚本中包含 xlsx.full.min.js。

var fileUpload = this.getView().byId("fileUploader");
    var domRef = fileUpload.getFocusDomRef();
    var file = domRef.files[0];
    //var XLSX = new ExcelPlus();
    //XLSX.createFile(["CT_MAIN"]);

    var reader = new FileReader();
    var name = file.name;

    reader.onload = function (e) {
        var data = e.target.result;
        var workbook = XLSX.read(data, { type: 'binary' });

        var result = {};
        workbook.SheetNames.forEach(function (sheetName) {
            var rObjArr = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);
            if (rObjArr.length > 0) {
                result[sheetName] = rObjArr;
            }
        });
        var output = JSON.stringify(result, 2, 2);

        console.log('output');
        console.log(output);
    };

    reader.readAsBinaryString(file);
于 2017-08-27T07:26:12.613 回答