首页 > 解决方案 > 如何从本地 XLSX 文件中读取数据并将其保存到对象/数组中

问题描述

我需要从本地 XLSX 文件中读取数据并将其保存到对象(或数组)中。

数据如下所示:

我需要这样的数据:

所以我可以使用它(将它与其他对象进行比较/显示它......)

这怎么可能?

I tried an AJAX call with the following code:

/* set up XMLHttpRequest */
var url = "Test.xlsx";
var oReq = new XMLHttpRequest();
oReq.open("GET", url, true);
oReq.responseType = "arraybuffer";

oReq.onload = function(e) {
  var arraybuffer = oReq.response;

  /* convert data to binary string */
  var data = new Uint8Array(arraybuffer);
  var arr = new Array();
  for(var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]);
  var bstr = arr.join("");

  /* Call XLSX */
  var workbook = XLSX.read(bstr, {type:"binary"});

  /* DO SOMETHING WITH workbook HERE */
  var first_sheet_name = workbook.SheetNames[0];
  /* Get worksheet */
  var worksheet = workbook.Sheets[first_sheet_name];
  var test = XLSX.utils.sheet_to_json(worksheet,{raw:true})
  console.log(test)
}

oReq.send();

console.log(test) //I can not access it here..

它起作用了,我得到了我需要的对象,但问题是我无法访问函数之外的对象。几个小时前我发了一个帖子: 如何从异步调用(xlsx 文件)中获取对象到全局范围

标签: javascriptarraysparsingxlsx

解决方案


<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() {

        fetch(
                'CSV_DATASET.xlsx')
            .then(res => res.blob()) // Gets the response and returns it as a blob
            .then(blob => {
                // Like calling ref().put(blob)
                let file = new File([blob], {
                    type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
                });
                console.log(file)
                var xl2json = new ExcelToJSON();
                console.log(file)
                xl2json.parseExcel(file);
            });

    }
</script>

推荐阅读