2017-08-22 39 views
0

所以我有這個應用程序,我使用FileUploader上傳一個csv文件。但是現在我的要求是也允許excel文件。問題在於FileUploader在讀取垃圾時不支持excel。這是我在分析基於這個例子中的Excel文件試圖http://oss.sheetjs.com/js-xlsx/如何上傳SAPUI5中的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> AA「ƪc[žiiÿž‰ ûB¡J7±IU {2ñÍh²nm¶,Æ»R 〜Q·ÃR4DáAJ¬h>€ãÚÇVßƹ ªZ¨9ÈÛÁàNVÞ8E©OAN OJI){^ OA-I < 「{Üv^¥P!XS)bR¹rú-K¾s(¸3Õ`c[1]Þ0†½ ¡ ¬2nÏ}一個£勒達俞%AÄßdºždN「M,A¥ÇžDO97 ,〜§Èɸ8ÀOíc|n|Ñä安永企業家獎öéºóÀBÉÀ$}‡IAEE;?!{IDA [ƒîñ-é2þÿÿ

我是什麼做錯了,或者我在這裏錯過了什麼?

編輯:做了var workbook = XLSX.read(arr,{type:'base64'});我爲兩種文件類型都得到了空值。上面的垃圾日誌來自console.log(arr);

回答

0

由於您從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); 
+0

謝謝您的回答,我想通了,您的評論之前,我用以下 reader.readAsArrayBuffer(文件); 然後在onload函數中 var arr = String.fromCharCode.apply(null,new Uint8Array(strCSV)); 代碼的其餘部分與您的代碼看起來相同,區別在於我使用'base64'而不是'binary'。 – polaris

相關問題