2011-11-23 22 views
51

Sono in grado di leggere il file di Excel tramite FileReader ma restituisce testo e anche strani caratteri con esso. Ho bisogno di leggere il file xls in fila, leggere i dati in ogni colonna e convertirlo in JSON.Come analizzare il file Excel in Javascript/HTML5

Qualcuno sa leggere il file xls riga per riga.

Qualsiasi aiuto sarebbe molto apprezzato.

+0

possibile duplicato di [Come leggere un file Excel contenuto sul lato client?] (Http://stackoverflow.com/questions/6382572/how -to-read-an-excel-file-contents-on-client-side) –

+1

@JoachimPileborg: questo non risponde alla domanda. Ho bisogno di leggere il file excel riga per riga.Anche se posso leggerlo usando FileReader (HTML5) ma non riesco ancora a sfogliare le righe. – ducktyped

+0

puoi inviare il tuo codice di esempio – Vinoth

risposta

29

Below Function converte i dati del foglio Excel (formato XLSX) in JSON. puoi aggiungere promessa alla funzione.

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

Sotto post non ha il codice per il formato XLS Excel to JSON javascript code?

+0

si blocca per i file Excel più grandi in chrome, una buona soluzione per questo? – Zed

+0

Posso sapere quanto è grande il tuo file? – Peru

+0

Ho usato una promessa per caricare il file excel, quindi l'ho inserito come argomento ... Qualcun'altro ha riscontrato il problema "Impossibile eseguire" readAsBinaryString "su" FileReader ": il parametro 1 non è di tipo" Blob ". "? – Iancovici

0

XLS è un formato proprietario binario utilizzato da Microsoft. L'analisi di XLS con lingue lato server è molto difficile senza utilizzare alcuna libreria specifica o Office Interop. Fare questo con javascript è una missione impossibile. Grazie all'API di file HTML5 puoi leggere il suo contenuto binario ma per analizzarlo e interpretarlo dovrai immergerti nello specifications of the XLS format. A partire da Office 2007, Microsoft ha adottato i formati di file Open XML (xslx per Excel), che è uno standard.

+0

Grazie, ma dovrebbe esserci già un plug-in. : | – ducktyped

+0

@ducktyped, non sono a conoscenza né ho visto alcun codice javascript che legge un file binario di Excel. –

+10

Missione impossibile? Ne dubito. Se siamo in grado di eseguire il kernel Linux in JavaScript sul lato client, dovrebbe essere possibile analizzare un file binario di Excel. È solo che nessuno a mia conoscenza l'ha ancora fatto. –

-4

var excel = new 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");

quando hai il foglio. È possibile utilizzare le funzioni VBA come in Excel.

+4

funziona solo con "il nostro caro amico" IE. E ho bisogno di usare HTML5. Devo solo sfogliare il contenuto del testo reale riga per riga. – ducktyped

+0

sì ma non c'è altro modo di aprire il file binario a meno che non sia un file csv ... – i100

79

Vecchia domanda, ma dovrei notare che il compito generale di analizzare i file XLS da javascript è noioso e difficile ma non impossibile.

ho parser di base implementata in JS puri:

Entrambe le pagine sono HTML5 I parser XLS/XLSX basati su API file (puoi trascinare il tuo file e stamperà i dati nelle celle in un elenco separato da virgole). Puoi anche generare oggetti JSON (supponendo che la prima riga sia una riga di intestazione).

La suite di test http://oss.sheetjs.com/ mostra una versione che utilizza XHR per ottenere e analizzare i file.

+4

Se si potesse aggiungere un codice di esempio alla risposta, sarebbe molto meglio (aggiungere anche una diaclaimer se si è nelle librerie capo). – acdcjunior

+4

Così fantastico. – eyelidlessness

+2

grazie uomo, grande aiuto –

2

Questo codice può aiutare a
La maggior parte dei jszip.js tempo non sta funzionando in modo da includere xlsx.full.min.js nel codice js.

codice 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]); 
    }; 
Problemi correlati