Как загрузить файл Excel в SAPUI5?

поэтому у меня есть это приложение, в которое я загружаю CSV-файл с помощью FileUploader. Однако теперь мое требование состоит в том, чтобы также разрешить файлы Excel. Проблема в том, что FileUploader не поддерживает excel, так как читает мусор. Это моя попытка проанализировать файл Excel на основе этого примера http://oss.sheetjs.com/js-xlsx/

Код:

        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)—K¹rú ¸3Õ`c[1]Þ0†½ ÝÎß»¾7 M4²©ŠôªZÆk+¿|\|z¿(Ž‹ôPúº6 h_-[ž@!‚ÒØPk‹´¬2nÏ}Ä? £LËð Ýû%á ÄßdºždN"m, à¥ÇžDO97‚~§Èɸ8ÀOic |n¦Сä Eøÿ ö éºóÀBÉÀ!$}‡íàÈé;{ìÐå[ƒîñ–é2þÿÿ

что я делаю не так, или что мне здесь не хватает?

Изменить: после выполнения var workbook = XLSX.read(arr, {type: 'base64'}); Я получаю null для обоих типов файлов. Приведенный выше журнал мусора поступает из console.log(arr);


person polaris    schedule 22.08.2017    source источник


Ответы (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);
person Stephen S    schedule 27.08.2017
comment
Спасибо за ваш ответ, я разобрался до вашего комментария и использовал следующий reader.readAsArrayBuffer(file); затем в функции загрузки var arr = String.fromCharCode.apply(null, new Uint8Array(strCSV)); Остальной код выглядит так же, как ваш, с той разницей, что вместо «двоичного» я ​​использовал «base64». - person polaris; 28.08.2017