2017-04-10 9 views
0

emberと電子を統合しようとしていて、サービス内でXLSXパーサーを使用してローカルのExcelファイルを読み込んでいますが、私のルートに注入するとこのエラーが発生します。助けてください。 excelパーサーのEmberJsエラー

マイサービスファイル:

 import Ember from 'ember'; 
    export default Ember.Route.extend({ 
    sheet: Ember.inject.service('sheet'), 
    message: 'test', 
    actions: { 

     pressButton: function() { 
      let sheet=Ember.get(this,'sheet').ExcelToJson(); 
      var testText = this.get('sheet').ExcelToJson(); 
      this.set('message',testText); 
     } 

     } 
}); 

マイテンプレートファイル:電子上で実行されている

<button class="button" {{action "pressButton"}}>press</button> 

エラー:

私はサービスを注入しています

import Ember from 'ember'; 
const remote=require('electron').remote; 
const fs=remote.require('fs'); 
const XLSX = require('xlsx'); 
var f = "c:\\Users\\rajeev\\Downloads\\Tableau\\SuperStoreUS_2015.xlsx"; 


export default Ember.Service.extend({ 


    ExcelToJson:function(f){ 

     var workbook = XLSX.readfile(f.toString()); 
     var worksheet=workbook.Sheets['Orders']; 
     alert(worksheet); 
          } 

}); 

マイルートファイル

TypeError: Cannot read property 'toString' of undefined 
    at Class.ExcelToJson (serviceeg.js:544) 
    at Class.pressButton (serviceeg.js:516) 
    at Router.triggerEvent (vendor.js:39675) 
    at trigger (vendor.js:67017) 
    at Router.trigger (vendor.js:68617) 
    at Class.send (vendor.js:38863) 
    at Class.send (vendor.js:42875) 
    at vendor.js:22521 
    at Object.flaggedInstrument (vendor.js:29424) 
    at vendor.js:22520 

答えて

0

この行によってスローされて見ているエラー:

その行が含まれているあなたの方法は、競合であるローカル変数 fを宣言しているためだ
var workbook = XLSX.readfile(f.toString()); 

サービスレベルの変数fをテストファイル名にしてください。そのテストファイル名をExcelToJsonメソッドに移動する場合は、設定する必要があります。

0

xlsxファイルは、データを含む多くのxmlファイルで構成されていると思います。データを取得する1つの方法は、それらのXMLを抽出して解析することです。私はこのXLSXパーサ
xlsx parser

を見つけ
xlsxParser = (function() { 
function extractFiles(file) { 
    var deferred = $.Deferred(); 

    zip.createReader(new zip.BlobReader(file), function(reader) { 
     reader.getEntries(function(entries) { 
      async.reduce(entries, {}, function(memo, entry, done) { 
       var files = ['xl/worksheets/sheet1.xml', 'xl/sharedStrings.xml']; 
       if (files.indexOf(entry.filename) == -1) return done(null, memo); 

       entry.getData(new zip.TextWriter(), function(data) { 
        memo[entry.filename.split('/').pop()] = data; 
        done(null, memo); 
       }); 
      }, function(err, files) { 
       if (err) deferred.reject(err); 
       else deferred.resolve(files); 
      }); 
     }); 
    }, function(error) { deferred.reject(error); }); 

    return deferred.promise(); 
} 

function extractData(files) { 
    var sheet = $(files['sheet1.xml']), 
     strings = $(files['sharedStrings.xml']), 
     data = []; 

    var colToInt = function(col) { 
     var letters = ["", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]; 
     var col = $.trim(col).split(''); 

     var n = 0; 

     for (var i = 0; i < col.length; i++) { 
      n *= 26; 
      n += letters.indexOf(col[i]); 
     } 

     return n; 
    }; 

    var Cell = function(cell) { 
     cell = cell.split(/([0-9]+)/); 
     this.row = parseInt(cell[1]); 
     this.column = colToInt(cell[0]); 
    }; 

    var d = sheet.find('dimension').attr('ref').split(':'); 
    d = _.map(d, function(v) { return new Cell(v); }); 

    var cols = d[1].column - d[0].column + 1, 
     rows = d[1].row - d[0].row + 1; 

    _(rows).times(function() { 
     var _row = []; 
     _(cols).times(function() { _row.push(''); }); 
     data.push(_row); 
    }); 

    sheet.find('sheetData row c').each(function(i, c) { 
     var $cell = $(c), 
      cell = new Cell($cell.attr('r')), 
      type = $cell.attr('t'), 
      value = $cell.find('v').text(); 

     if (type == 's') value = strings.find('si t').eq(parseInt(value)).text(); 

     data[cell.row - d[0].row][cell.column - d[0].column] = value; 
    }); 

    return data; 
} 

return { 
    parse: function(file) { 
     return extractFiles(file).pipe(function(files) { 
      return extractData(files); 
     }); 
    } 
}})();