2012-03-01 5 views
1

私は、いくつかのグラフを含むHTMLページを持っています。私がしたいのは、Excelシートから値を読み込み、変数に格納し、HTMLページでそれらの値を使用する、読み込み中のjavascript関数を書くことです。私の質問は、シートセルをExcelからの解析値のようにExcelシートを処理する任意のJavaScript APIですか?Javascript Excel Sheet

+0

ここにたくさんの質問があります。 1.ユーザーのローカルマシンのファイルにアクセスできないため、サーバーにアップロードする必要があります。 2.これがxlsかxlsxであるかどうかは多分に依存します。 –

+0

そして奇妙なアイデア!スプレッドシートをサーバー側にアップロードして、サーバー側の言語でサポートされているまともなライブラリで読んでみませんか? – Philippe

+0

「xmlとして保存」し、データを解析して必要な情報を取得しないのはなぜですか? –

答えて

2

私はJavaScriptでのxlsxパーサを書きました。 https://gist.github.com/trevordixon/3375836

/* 
    Relies on jQuery, underscore.js, Async.js (https://github.com/caolan/async), and zip.js (http://gildas-lormeau.github.com/zip.js). 
    Tested only in Chrome on OS X. 

    Call xlsxParser.parse(file) where file is an instance of File. For example (untested): 

    document.ondrop = function(e) { 
     var file = e.dataTransfer.files[0]; 
     excelParser.parse(file).then(function(data) { 
      console.log(data); 
     }, function(err) { 
      console.log('error', err); 
     }); 
    } 
*/ 

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); 
      }); 
     } 
    } 
})(); 
1

あなたは、Excelからデータを読み出すためにActiveXオブジェクトを利用して試すことができます。さまざまなユーティリティメソッドがあります。

このリンクをご覧ください。

http://www.roseindia.net/javascript/javascriptexamples/javascript-get-excel-file-data.shtml

+0

が必要なく、ActiveXはのみのために使用することができるときIEの権利?私はSafariで何かをしたい –

関連する問題