如何在 Javascript/HTML5 中解析 Excel (XLS) 文件

IT技术 javascript json html xls filereader
2021-02-04 16:51:19

我可以通过FileReader读取 Excel 文件,但它会输出文本和奇怪的字符。我需要xls逐行读取文件,读取每一列中的数据并将其转换为 JSON。

如何逐行读取xls文件?

6个回答

下面的函数将 Excel 工作表(XLSX 格式)数据转换为 JSON。您可以向该功能添加Promise。

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

下面的帖子有 XLS 格式的Excel 到 JSON javascript 代码的代码?

我可以知道你的文件有多大吗?
2021-03-13 16:51:19
它会因 chrome 中较大的 excel 文件而崩溃,对此有什么好的解决方案吗?
2021-03-17 16:51:19
对我来说,我必须jszip.jsxlsx.js.
2021-03-31 16:51:19
如何将 json_object 分配给公共变量并在 for 循环之外访问它?
2021-03-31 16:51:19
e.target.result() 应该是 e.target.result 参见developer.mozilla.org/en-US/docs/Web/API/FileReader/onload
2021-04-10 16:51:19

老问题,但我应该注意到从 javascript 解析 XLS 文件的一般任务是乏味和困难的,但并非不可能。

我有用纯 JS 实现的基本解析器:

两个页面都是 HTML5 文件 API 驱动的 XLS/XLSX 解析器(您可以拖放您的文件,它将打印出逗号分隔列表中单元格中的数据)。您还可以生成 JSON 对象(假设第一行是标题行)。

测试套件http://oss.sheetjs.com/显示了一个使用 XHR 获取和解析文件的版本。

如果您可以在答案中添加一些示例代码,它会变得更好(如果您是图书馆的领导者,还可以添加一个声明)。
2021-03-15 16:51:19
我在博客上写了这个psjinx.com/programming/2014/01/04/... :)
2021-03-16 16:51:19
我们可以用 JS-XLSX 跳过 xlsx 的几行和几列吗?
2021-04-02 16:51:19

excel file此处上传,您可以获取以下JSON格式的数据console

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/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>
    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.parse(json_object));
            jQuery( '#xlx_json' ).val( json_object );
          })
        };

        reader.onerror = function(ex) {
          console.log(ex);
        };

        reader.readAsBinaryString(file);
      };
  };

  function handleFileSelect(evt) {
    
    var files = evt.target.files; // FileList object
    var xl2json = new ExcelToJSON();
    xl2json.parseExcel(files[0]);
  }


 
</script>

<form enctype="multipart/form-data">
    <input id="upload" type=file  name="files[]">
</form>

    <textarea class="form-control" rows=35 cols=120 id="xlx_json"></textarea>

    <script>
        document.getElementById('upload').addEventListener('change', handleFileSelect, false);

    </script>

这是以下Stackoverflow帖子的组合

  1. https://stackoverflow.com/a/37083658/4742733
  2. https://stackoverflow.com/a/39515846/4742733

祝你好运...

这段代码可以帮助你
大多数时候 jszip.js 不工作,所以在你的 js 代码中包含 xlsx.full.min.js。

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]);
    };
我能够读取 excel 和 csv 文件
2021-04-04 16:51:19
如果我还想在 Excel 表中上传图像呢?
2021-04-09 16:51:19

如果您想要在浏览器中以最简单和最小的方式读取 *.xlsx 文件,那么这个库可能会这样做:

https://catamphetamine.github.io/read-excel-file/

<input type="file" id="input" />
import readXlsxFile from 'read-excel-file'

const input = document.getElementById('input')

input.addEventListener('change', () => {
  readXlsxFile(input.files[0]).then((data) => {
    // `data` is an array of rows
    // each row being an array of cells.
  })
})

在上面的例子中data是原始字符串数据。可以通过传递schema参数将其解析为具有严格模式的 JSON 有关示例,请参阅 API 文档。

API 文档:http : //npmjs.com/package/read-excel-file