2011-11-23 17 views
51

Jestem w stanie odczytać plik Excel poprzez FileReader, ale wypisuje on tekst oraz dziwne znaki. Muszę czytać wiersz w wierszu xls, odczytać dane w każdej kolumnie i przekonwertować je na JSON.Jak analizować plik Excel w JavaScript/HTML5

Czy ktoś wie, jak czytać plik xls wiersz po wierszu.

Każda pomoc będzie bardzo ceniona.

+0

możliwe duplikat [Jak odczytać zawartość pliku Excel na stronie klienta?] (Http://stackoverflow.com/questions/6382572/how -to-read-an-excel-file-content-on-client-side) –

+1

@JoachimPileborg: to nie odpowiada na pytanie. Muszę czytać plik Excela wiersz po wierszu.Chociaż mogę go odczytać przy użyciu FileReader (HTML5), ale nadal nie mogę przeglądać wierszy. – ducktyped

+0

możesz wysłać swój przykładowy kod – Vinoth

Odpowiedz

29

Poniżej funkcja konwertuje dane arkusza Excel (format XLSX) na JSON. możesz dodać obietnicę do funkcji.

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

Poniżej post kod formacie XLS Excel to JSON javascript code?

+0

to zawiesza się na większe pliki Excel w chrome, jakieś dobre rozwiązanie do tego? – Zed

+0

Czy mogę wiedzieć, jak duży jest twój plik? – Peru

+0

Użyłem obietnicy do załadowania pliku excel, a następnie wstawiłem go jako argument ... Każdy inny wpadł na numer "Nie można wykonać" readAsBinaryString "w" FileReader ": parametr 1 nie jest typu" Blob ". "? – Iancovici

0

XLS to binarny prawnie zastrzeżony format używany przez firmę Microsoft. Parsowanie XLS z językami po stronie serwera jest bardzo trudne bez użycia konkretnej biblioteki lub Office Interop. Robiąc to z javascript, misja jest niemożliwa. Dzięki API HTML5 można odczytać jego zawartość binarną, ale aby ją przeanalizować i zinterpretować, musisz zanurkować w specifications of the XLS format. Począwszy od wersji Office 2007, firma Microsoft przyjęła formaty plików Open XML (xslx dla programu Excel), które są standardem.

+0

Dzięki, ale tam już powinna być wtyczka. : | – ducktyped

+0

@ducsedped, nie jestem świadomy ani nie widziałem żadnego kodu javascript, który czyta binarny plik Excela. –

+10

Mission impossible? Wątpię. Jeśli możemy uruchomić jądro Linux w javascript po stronie klienta, powinno być możliwe przeanalizowanie binarnego pliku Excel. Chodzi o to, że nikt do mojej wiedzy jeszcze tego nie zrobił. –

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

kiedy masz arkusz. Można używać funkcji VBA tak jak w Excelu.

+4

działa to tylko z "naszym drogim przyjacielem" IE. I muszę użyć HTML5. Potrzebuję tylko przeglądać aktualną zawartość tekstu wiersz po wierszu. – ducktyped

+0

tak, ale nie ma innego sposobu na otworzenie pliku binarnego, chyba że jest to plik csv ... – i100

79

Stare pytanie, ale powinienem zauważyć, że ogólne zadanie parsowania plików XLS z javascript jest uciążliwe i trudne, ale nie niemożliwe.

Mam podstawowe Parsery realizowane w czystych JS:

Obie strony są HTML5 Analizatory składni XLS/XLSX oparte na API (możesz przeciągnąć plik i wydrukować dane w komórkach na liście rozdzielanej przecinkami). Można także generować obiekty JSON (zakładając, że pierwszy wiersz jest wierszem nagłówka).

Zestaw testowy http://oss.sheetjs.com/ pokazuje wersję, która używa XHR do pobierania i analizowania plików.

+4

Jeśli mógłbyś dodać przykładowy kod do odpowiedzi, to by to uczyniło znacznie lepiej (dodaj też diaclaimer, jeśli jesteś biblioteką lider). – acdcjunior

+4

Tyle niesamowitych. – eyelidlessness

+2

dziękuję człowiekowi, wspaniała pomoc –

2

Kod ten może pomóc
Większość jszip.js czasu nie działa więc to xlsx.full.min.js w kodzie js.

Kod 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]); 
    };