In this article I will explain with an example, how to read and parse Excel file (XLS and XLSX) using JavaScript.
Once File is selected in FileUpload control, it is read as Binary data and then the Binary data is read using the xlsx Excel plugin.
The read data from Excel file is displayed in HTML Table using JavaScript.
 
 

HTML Markup

The HTML Markup consists of:
FileUpload – For selecting file.
Button - For upload selected file.
The Button has been assigned with an OnClick event handler.
<input type="file" id="fileUpload" />
<input type="button" id="upload" value="Upload" onclick="Upload()" />
<hr />
<div id="dvExcel">
 
 

Reading (Parsing) Excel File (XLS and XLSX) and displaying data in HTML Table using JavaScript

When the Excel file is selected in FileUpload control (HTML File Input) and Upload button is clicked, the Upload JavaScript function is being called.
Inside the function, first a check is performed to verify whether the file is a valid Excel file i.e. file with extension XLS or XLSX. Then a check is performed to make sure whether the browser supports HTML5 FileReader API.
The Excel file is read as Binary data using HTML5 FileReader and then the Binary data is read using the xlsx Excel plugin which returns rows from Excel in JSON Array format.
Finally, a loop is executed over the JSON Array and the HTML Table is populated.
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.13.5/xlsx.full.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.13.5/jszip.js"></script>
<script type="text/javascript">
    function Upload() {
        //Reference the FileUpload element.
        var fileUpload = document.getElementById("fileUpload");
 
        //Validate whether File is valid Excel file.
        var regex = /^([a-zA-Z0-9\s_\\.\-:])+(.xls|.xlsx)$/;
        if (regex.test(fileUpload.value.toLowerCase())) {
            if (typeof (FileReader) !"undefined") {
                var reader = new FileReader();
 
                //For Browsers other than IE.
                if (reader.readAsBinaryString) {
                    reader.onload = function (e) {
                        ProcessExcel(e.target.result);
                    };
                    reader.readAsBinaryString(fileUpload.files[0]);
                 }else {
                    //For IE Browser.
                    reader.onload = function (e) {
                        var data = "";
                        var bytes = new Uint8Array(e.target.result);
                        for (var i = 0; i < bytes.byteLength; i++) {
                             data += String.fromCharCode(bytes[i]);
                        }
                        ProcessExcel(data);
                    };
                    reader.readAsArrayBuffer(fileUpload.files[0]);
                }
             }else {
                alert("This browser does not support HTML5.");
            }
         }else {
            alert("Please upload a valid Excel file.");
        }
    };
    function ProcessExcel(data) {
        //Read the Excel File data.
        var workbook = XLSX.read(data, {
             type:'binary'
        });
 
        //Fetch the name of First Sheet.
        var firstSheet workbook.SheetNames[0];
 
        //Read all rows from First Sheet into an JSON array.
        var excelRows XLSX.utils.sheet_to_row_object_array(workbook.Sheets[firstSheet]);
 
        //Create a HTML Table element.
        var table = document.createElement("table");
        table.border "1";
 
        //Add the header row.
        var row = table.insertRow(-1);
 
        //Add the header cells.
        var headerCell document.createElement("TH");
        headerCell.innerHTML "Id";
        row.appendChild(headerCell);
 
        headerCell document.createElement("TH");
        headerCell.innerHTML "Name";
        row.appendChild(headerCell);
 
        headerCell document.createElement("TH");
        headerCell.innerHTML "Country";
        row.appendChild(headerCell);
 
        //Add the data rows from Excel file.
        for (var i = 0; i < excelRows.length; i++) {
            //Add the data row.
            var row = table.insertRow(-1);
 
            //Add the data cells.
            var cell = row.insertCell(-1);
            cell.innerHTML excelRows[i].Id;
 
            cell = row.insertCell(-1);
            cell.innerHTML excelRows[i].Name;
 
            cell = row.insertCell(-1);
            cell.innerHTML excelRows[i].Country;
        }
 
        var dvExcel = document.getElementById("dvExcel");
        dvExcel.innerHTML "";
        dvExcel.appendChild(table);
    };
</script>
 
 

Screenshots

Contents of the Excel file placed on user’s folder

Read (Parse) Excel File (XLS and XLSX) using JavaScript
 

The Excel file being displayed in browser as HTML Table

Read (Parse) Excel File (XLS and XLSX) using JavaScript
 
 

Browser Compatibility

The above code has been tested in the following browsers.
Microsoft Edge   FireFox  Chrome  Safari  Opera
* All browser logos displayed above are property of their respective owners.
 
 

Downloads