使用SheetJS中的一款js-xlsx

3,640 阅读1分钟

1、官方地址github.com/SheetJS/js-…

2、在dist目录下下载文件xlsx.core.min.js

3、读取excel

// 读取本地excel文件
function readWorkbookFromLocalFile(file, callback) {
    var reader = new FileReader();
    reader.onload = function(e) {
            var data = e.target.result;
            var workbook = XLSX.read(data, {type: 'binary'});
            if(callback) callback(workbook);
    };
    reader.readAsBinaryString(file);
}

// 从网络上读取某个excel文件,url必须同域,否则报错
function readWorkbookFromRemoteFile(url, callback) {
    var xhr = new XMLHttpRequest();
    xhr.open('get', url, true);
    xhr.responseType = 'arraybuffer';
    xhr.onload = function(e) {
        if(xhr.status == 200) {
            var data = new Uint8Array(xhr.response)
            var workbook = XLSX.read(data, {type: 'array'});
            if(callback) callback(workbook);
        }
    };
    xhr.send();
}

4、读取workbook

// 读取 workbook
function readWorkbook(workbook) {
  let sheetNames = workbook.SheetNames; // 工作表名称集合
  let worksheet = workbook.Sheets[sheetNames[0]]; // 这里我们只读取第一张sheet
  let csv = XLSX.utils.sheet_to_csv(worksheet);
  return csv2table(csv)
}
// 将csv转换成简单的表格,会忽略单元格合并,在第一行和第一列追加类似excel的索引
function csv2table(csv) {
  let arrs = [];
  let rows = csv.split('\n');
  let first_rows = rows.shift().split(','); // 第一行没用的
  rows.pop(); // 最后一行没用的
  rows.forEach(function (row, idx) {
    let columns = row.split(',');
    let obj = {}
    columns.forEach(function (col, idx) {
      obj[first_rows[idx]] = col
    })
    arrs.push(obj)
  });
  return arrs;
}