0

I just want to open excel file before reading the uploaded excel file, i am using xlsx.read javascript API to read uploaded excel file, before that i need to open the file because the file is being password protected, i have shared the both concepts read excel file and open excel file can anyone please let me know how to open the using xlsx.read

Excel Reader using Javascript:

<html>

<input type="file" id="fileUpload" />
<input type="button" id="upload" value="Upload" onclick="UploadProcess()" />
<br/>

<div id="ExcelTable"></div>


<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 UploadProcess() {
    //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) {
                    GetTableFromExcel(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]);
                    }
                    GetTableFromExcel(data);
                };
                reader.readAsArrayBuffer(fileUpload.files[0]);
            }
        } else {
            alert("This browser does not support HTML5.");
        }
    } else {
        alert("Please upload a valid Excel file.");
    }
};
function GetTableFromExcel(data) {
    //Read the Excel File data in binary
    var workbook = XLSX.read(data, {
        type: 'binary'
    });

    
    //get the name of First Sheet.
    var Sheet = workbook.SheetNames[0];

    //Read all rows from First Sheet into an JSON array.
    var excelRows = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[Sheet]);

    //Create a HTML Table element.
    var myTable  = document.createElement("table");
    myTable.border = "1";

    //Add the header row.
    var row = myTable.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);
    
    headerCell = document.createElement("TH");
    headerCell.innerHTML = "Age";
    row.appendChild(headerCell);
    
    headerCell = document.createElement("TH");
    headerCell.innerHTML = "Date";
    row.appendChild(headerCell);
     
     headerCell = document.createElement("TH");
    headerCell.innerHTML = "Gender";
    row.appendChild(headerCell);


    //Add the data rows from Excel file.
    for (var i = 0; i < excelRows.length; i++) {
        //Add the data row.
        var row = myTable.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;
        
        cell = row.insertCell(-1);
        cell.innerHTML = excelRows[i].Age;
        
        cell = row.insertCell(-1);
        cell.innerHTML = excelRows[i].Date;
        
        cell = row.insertCell(-1);
        cell.innerHTML = excelRows[i].Gender;
    }
    

    var ExcelTable = document.getElementById("ExcelTable");
    ExcelTable.innerHTML = "";
    ExcelTable.appendChild(myTable);
 };
</script>
</html>

Open or Download Excel File using Javascript:

<html>
<body>
   <input type="button" onclick='window.open("test.xlsx")' value="Open File">
   <script type="text/javascript">      
    var request = new XMLHttpRequest();
    request.open("GET", "C:\Users\user\Downloads\test.xlsx");       
    request.responseType = "blob";
    request.onload = function() {
      // set `blob` `type` to `"text/html"`
      var blob = new Blob([this.response], {type:"text/html"});
      var url = URL.createObjectURL(blob);
      var w = window.open(url);
    }
    request.send();             
  </script>
 </body>
</html>
user3321757
  • 37
  • 1
  • 8
  • 1) Don't use readAsBinaryString - use arrayBuffer/uint8Array instead. 2) Better yet don't use the FileReader at all, just call `files[0].arrayBuffer().then(buffer => { ... })` 3) You don't have to check if FileReader exist - it Pretty much exist in every browser nowdays. 4) use fetch instead of XMLHttpRequest. 5) you can strip out `type=""` on your ` – Endless May 18 '21 at 10:05
  • Hey Endless, Thanks for your quick response,i have tried which you given steps,still it's not working – user3321757 May 18 '21 at 11:03
  • Hey Endless, Can i have a full modification which you explained earlier it's very helpful for me – user3321757 May 18 '21 at 11:04
  • https://jsfiddle.net/5kftjcg1/ – Endless May 18 '21 at 11:13
  • Hi Endless, Thanks a ton for your quick response, here the problem is excel file which we trying upload is being password protected, so my logic was while we trying to upload an excel file with password protected the excel file 1)should open using XMLHttpRequest.2) then we need to provide the valid passoword with authentication 3) Finally the file should read, so please correct me if i am wrong, meantime is there any other approach kindly let me know if any plugin or some idea, it's really very helpful for me, – user3321757 May 18 '21 at 14:23
  • Hi Endless, Can you please share any idea about how to handle password protected excel file, already implemented by using XLSX.read javascript API, but there is no solution for password protected excel file, kindly help. – user3321757 May 18 '21 at 14:57
  • I don't know how to handle psw protected files – Endless May 18 '21 at 19:08

0 Answers0