受密码保护的 Excel 文件阅读器

问题描述

任何人都可以推荐任何用于验证受密码保护的 excel 文件的 Javascript 插件,我有一个模块可以读取 excel 文件,但它不适用于受密码保护的 excel 文件,所以请分享一个想法

一旦我上传了 excel 文件,它应该像下面的场景一样工作

  1. 上传excel文件
  2. 检查excel文件是否受密码保护
  3. 验证excel文件密码
  4. 然后读取excel文件

使用 HTML JavaScript 的文件阅读器:

<html>
<input type="file" id="fileUpload" />
<input type="button" id="upload" value="Upload" onclick="UploadProcess()" />
<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);
};

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)