导入表excel

问题

XLSX.utils.sheet_to_json方法不带参数的调用,无法解析我们的复杂表头的excel表格,因此,我们需要通过传参数,来指定表头的真实起始位置。

关键代码分析:XLSX.utils.sheet_to_json

XLSX.utils.sheet_to_json(data, type)有两个参数,第一个是我们wordBook对象里面Sheets对象对应的数据,第二个参数配置如下:

raw: 使用原始值 (true) 或格式化字符串 (false) (默认值:true)dateNF: 在字符串输出中使用指定的日期格式(默认值:FMT 14)defval: 使用指定值代替 null 或 undefined ()blankrows: 在输出中包含空行**(默认值:** )range: - (number)使用工作表范围,但将起始行设置为值 - (String)使用指定范围(A1 样式的有界范围字符串 - (default)使用工作表范围 ( worksheet[‘!ref’])header: - 1: 生成数组数组(“二维数组”) - “A”.行对象键是文字列标签 - array of strings: 使用指定的字符串作为行对象中的键 - (default): 将第一行作为键读取并消除歧义

核心代码:

```javascript

// 模板代码

action="/fileUploadApi"

style="float:inline-end;margin-bottom: 5px;margin-right: 1%;"

:on-change="readExcel"

:auto-upload="false"

:show-file-list="false"

accept=".xlsx"

ref="upload"

:multiple="true"

>

导入文件

// 引用

import FileSaver from "file-saver";

import * as XLSX from "xlsx";

// 读取解析表格数据

readExcel(file, fileList) {

fileList

if (!file) {

return false;

} else if (!/.(xls|xlsx)$/.test(file.name.toLowerCase())) {

this.$message.error("上传格式不正确,请上传xls或者xlsx格式");

return false;

}

const fileReader = new FileReader();

fileReader.onload = (ev) => {

try {

const data = ev.target.result;

const workbook = XLSX.read(data, {

type: "binary",

});

if (workbook.SheetNames.length >= 1) {

this.$message({

message: "导入数据表格成功",

showClose: true,

type: "success",

});

}

const wsname = workbook.SheetNames[0]; //取第一张表

console.log(workbook.Sheets[wsname])

const ws = XLSX.utils.sheet_to_json(workbook.Sheets[wsname], {range:1,header:1,defval:''}); //生成json表格内容

console.log("生成json:", ws);

} catch (e) {

console.log(e);

return false;

}

};

// 如果为原生 input 则应是 files[0]

fileReader.readAsBinaryString(file.raw);

},

结果

通过生成如上的数组,我们再进行二次处理,即可渲染出我们想要的复杂表格。

好文阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: