2011-11-23 5 views
51

FileReaderでExcelファイルを読むことができますが、それにテキストと奇妙な文字が出力されます。私はxlsファイルを行ごとに読んで、すべての列のデータを読んでそれをJSONに変換する必要があります。Javascript/HTML5でExcelファイルを解析する方法

誰もxlsファイルを行ごとに読み取る方法を知っていますか。

ご協力いただければ幸いです。

+0

の可能重複[クライアント側でExcelファイルの内容を読み取る方法?](http://stackoverflow.com/questions/6382572/howクライアント側のファイル内容を読み取る) –

+1

@JoachimPileborg:これは質問に答えません。私は行ごとにファイルを読み込む必要があります。私はFileReader(HTML5)を使って読むことができますが、まだ行をブラウズすることはできません。 – ducktyped

+0

サンプルコード – Vinoth

答えて

29

以下は、Excelシート(XLSX形式)のデータをJSONに変換する機能です。関数に約束を追加することができます。ポスト以下

<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/xlsx.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/jszip.js"></script> 
<script> 
var ExcelToJSON = function() { 

    this.parseExcel = function(file) { 
    var reader = new FileReader(); 

    reader.onload = function(e) { 
     var data = e.target.result(); 
     var workbook = XLSX.read(data, { 
     type: 'binary' 
     }); 

     workbook.SheetNames.forEach(function(sheetName) { 
     // Here is your object 
     var XL_row_object = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]); 
     var json_object = JSON.stringify(XL_row_object); 
     console.log(json_object); 

     }) 

    }; 

    reader.onerror = function(ex) { 
     console.log(ex); 
    }; 

    reader.readAsBinaryString(file); 
    }; 
}; 
</script> 

XLS形式のコードExcel to JSON javascript code?

+0

それはクロムのより大きなエクセルファイル、それのための良い解決のためにクラッシュする? – Zed

+0

ファイルのサイズがわかりますか? – Peru

+0

私はexcelファイルを読み込むために約束を使用し、それを引数として挿入しました...誰もが問題に出ました "FileReaderで 'readAsBinaryString'を実行できませんでした:パラメータ1は 'Blob'型ではありません。 "? – Iancovici

0

XLSは、Microsoftが使用するバイナリ独自の形式です。特定のライブラリやOffice Interopを使用しなければ、サーバー側の言語でXLSを解析することは非常に困難です。 javascriptでこれを行うことは不可能です。 HTML5 File APIのおかげでバイナリの内容を読むことができますが、それを解析して解釈するためにはspecifications of the XLS formatにダイビングする必要があります。 Office 2007からは、標準であるOpen XMLファイル形式(Excel用のxslx)が採用されました。

+0

を送信できますか?ありがとうございますが、既にプラグインがあるはずです。 :| – ducktyped

+0

@ducktyped、私はバイナリExcelファイルを読み込むjavascriptコードを認識しておらず、見ていません。 –

+10

ミッション不可?疑わしい。クライアント側のjavascriptでLinuxカーネルを実行できるのであれば、バイナリのExcelファイルを解析できるはずです。私の知る人はまだいません。 –

-4

var excel =新しいActiveXObject( "Excel.Application"); var book = excel.Workbooks.Open(your_full_file_name_here.xls); var sheet = book.Sheets.Item(1); var value = sheet.Range( "A1");

シートがあるとき。 Excelで行うように、VBA関数を使用できます。

+4

これは「われわれの親愛なる友人」のIEでのみ動作します。 HTML5を使用する必要があります。私はちょうど行ごとに実際のテキストコンテンツをブラウズする必要があります。 – ducktyped

+0

はい、CSVファイル以外のバイナリファイルを開く方法はありません... – i100

79

古い質問ですが、javascriptからXLSファイルを解析する一般的な作業は面倒で困難ですが不可能ではないことに注意してください。

私は基本的なパーサは、純粋なJSで実装している:

HTML5 File-API-driven XLS/XLSXパーサー(ファイルをドラッグアンドドロップすると、セル内のデータがコンマ区切りのリストに印刷されます)。 JSONオブジェクトを生成することもできます(最初の行がヘッダー行であることを前提とします)。

テストスイートhttp://oss.sheetjs.com/には、XHRを使用してファイルを取得および解析するバージョンが示されています。

+4

答えにいくつかのサンプルコードを追加することができれば、それははるかに良いでしょう(また、あなたがライブラリの場合はdiaclaimerを追加してくださいリーダー)。 – acdcjunior

+4

とても素晴らしいです。 – eyelidlessness

+2

ありがとう、大助け –

2

このコードはあなたに
を助けることができる時間jszip.jsのほとんどはそれほど機能していない持っているあなたのJSコードでxlsx.full.min.jsが含まれます。

HTMLコード

<input type="file" id="file" ng-model="csvFile" 
    onchange="angular.element(this).scope().ExcelExport(event)"/> 

Javascriptを

<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/xlsx.js"> 
</script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/jszip.js"> 
</script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.10.8/xlsx.full.min.js"> 
</script> 

$scope.ExcelExport= function (event) { 


    var input = event.target; 
    var reader = new FileReader(); 
    reader.onload = function(){ 
     var fileData = reader.result; 
     var wb = XLSX.read(fileData, {type : 'binary'}); 

     wb.SheetNames.forEach(function(sheetName){ 
     var rowObj =XLSX.utils.sheet_to_row_object_array(wb.Sheets[sheetName]); 
     var jsonObj = JSON.stringify(rowObj); 
     console.log(jsonObj) 
     }) 
    }; 
    reader.readAsBinaryString(input.files[0]); 
    }; 
関連する問題