【问题标题】:How to fix uncaught exception: Header Signature如何修复未捕获的异常:标头签名
【发布时间】:2016-08-05 09:59:38
【问题描述】:

我想上传一个 excel 文档,阅读该文档并在 jquery 中以表格格式写入 excel 文档内容,我通过here 的示例参考实现了这一点。首先感谢该参考,但在这里我从系统本地存储上传我的 excel 文档,它显示名为 “未捕获异常:标题签名:预期 d0cf11e0a1b11ae1 看到 504b030414000600” 的错误。如果我正在上传我从here 下载的文档,则成功生成结果。我没有得到发生的错误是什么,我在过去 2 天遇到此错误 谁能告诉我如何解决这个问题

这是我的 HTML 代码

<html>
    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.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.8.0/xlsx.js"></script>
        <script src=" https://cdnjs.cloudflare.com/ajax/libs/xls/0.7.4-a/xls.js"></script>
        <title>Test Excel</title>
    </head>
    <body onload="load_excel();">
      <input type="file" id="my_file_input"/>
      <div id='my_file_output'></div>
        <script type="text/javascript" src="cordova.js"></script>
        <script type="text/javascript" src="js/index.js"></script>
    </body>
</html>

这是我的 JS 代码:

function load_excel(){

  var oFileIn;
  oFileIn = document.getElementById('my_file_input');
    if(oFileIn.addEventListener) {
        oFileIn.addEventListener('change', filePicked, false);
    }

}
function filePicked(oEvent){

    alert('Function trigggered');

    // Get The File From The Input
  var oFile = oEvent.target.files[0];
  var sFilename = oFile.name;
  // Create A File Reader HTML5
  var reader = new FileReader();

  // Ready The Event For When A File Gets Selected
  reader.onload = function(e) {
      var data = e.target.result;
      var cfb = XLS.CFB.read(data, {type: 'binary'});
      var wb = XLS.parse_xlscfb(cfb);
      // Loop Over Each Sheet
      wb.SheetNames.forEach(function(sheetName) {
          // Obtain The Current Row As CSV
          var sCSV = XLS.utils.make_csv(wb.Sheets[sheetName]);
          var data = XLS.utils.sheet_to_json(wb.Sheets[sheetName], {header:1});
          $.each(data, function( indexR, valueR ) {
              var sRow = "<tr>";
              $.each(data[indexR], function( indexC, valueC ) {
                  sRow = sRow + "<td>" + valueC + "</td>";
              });
              sRow = sRow + "</tr>";
              $("#my_file_output").append(sRow);
          });
      });
  };

  // Tell JS To Start Reading The File.. You could delay this if desired
  reader.readAsBinaryString(oFile);
}

【问题讨论】:

  • 你发现两个excel文件有什么不同吗?
  • 感谢您的建议。通过将文件格式更改为“XLS”,它仅从以“XLS”格式而不是“XLSX”格式保存的 excel 文件中检索数据,它正在完美检索数据.谢谢@HassanALi
  • 我为你感到高兴。

标签: jquery excel uncaught-exception


【解决方案1】:

您可以对其进行编码,使其同时接受 xlsx 和 xls。根据您的问题和SheetJS/js-xlsx 的文档,我建议如下:

function filePicked(oEvent) {
// Get The File From The Input
var oFile = oEvent.target.files[0];
var sFilename = oFile.name;
// Create A File Reader HTML5
var reader = new FileReader();

// Ready The Event For When A File Gets Selected
reader.onload = function(e) {
    var data = e.target.result;
    var cfb = XLSX.read(data, {type: 'binary'});
    console.log(cfb)
    cfb.SheetNames.forEach(function(sheetName) {
        // Obtain The Current Row As CSV
        var sCSV = XLS.utils.make_csv(cfb.Sheets[sheetName]);   
        var oJS = XLS.utils.sheet_to_json(cfb.Sheets[sheetName]);   

        $("#my_file_output").html(sCSV);
        console.log(oJS)
        $scope.oJS = oJS
    });
};

// Tell JS To Start Reading The File.. You could delay this if desired
reader.readAsBinaryString(oFile);}

我试过了,效果很好。让我知道是否可以帮助您。

【讨论】:

  • 我收到此错误:“未捕获的 ReferenceError:XLSX 未在 FileReader.reader.onload 中定义”
猜你喜欢
  • 1970-01-01
  • 2018-04-11
  • 1970-01-01
  • 2012-05-24
  • 2020-01-13
  • 2010-10-29
  • 2016-02-24
  • 2015-03-16
  • 2023-03-12
相关资源
最近更新 更多