2017-08-22 6 views
0

私はFileUploaderを使用してcsvファイルをアップロードするこのアプリを持っています。しかし、今私の要件は、Excelファイルを許可することです。問題は、FileUploaderがゴミを読み込む際にExcelをサポートしていないことです。これは、この例に基づいてExcelファイルを解析する時、私の試みですhttp://oss.sheetjs.com/js-xlsx/SAPUI5でExcelファイルをアップロードする方法は?

コード:私はすべてが正常に動作します。このコードを使用してCSVファイルをアップロードした場合

 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); 

。私は、Excelファイルを使用している場合は、私が取得するには、次

[1] [CONTENT_TYPES]の.xml¢[1]([1]¬」ËNÃ0E÷HüCä-Jܲ@5í,ÇQ> AA「ƪc[žiiÿž‰ ▲▼▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▼▲▼▲▼▲▲▲▼▲▼▲▲▲▼▲▼▲▼▲▼▲▼▲▼▲▼▲ "{Üv^¥P!XS}bR1rú-K¾s(¸3Õ`c[1]Þ0†½ ÝÎß»¾7M4²©ŠôªZÆk+¿| \ |z¿(Ž<ôPúº6h _- [ž@、ÒØPk<' ?¬2nÏ}Ä£レダゆう%áÄßdºždN「メートル、à¥ÇžDO97、〜§Èɸ8ÀOíc|n|ÑäEOYöéºóÀBÉÀ$}‡íàÈé; {IDA [ƒîñ-é2þÿÿ

私は何!間違っている、または私はここで何が不足していますか?

編集:var workbook = XLSX.read(arr、{type: 'base64'})を実行した後、両方のファイルタイプでnullが返されます。上記のガベージログは、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)); 残りのコードは、あなたと同じように見えますが、 'binary64'の代わりに 'base64'を使用するという違いがあります。 – polaris

関連する問題