XLSX.utils.sheet_to_json方法不带参数的调用,无法解析我们的复杂表头的excel表格,因此,我们需要通过传参数,来指定表头的真实起始位置。
XLSX.utils.sheet_to_json(data, type)有两个参数,第一个是我们wordBook对象里面Sheets对象对应的数据,第二个参数配置如下:
核心代码:
```javascript
// 模板代码
<el-upload
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"
>
<el-button type="primary" size="mini">导入文件</el-button>
// 引用
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);
},
通过生成如上的数组,我们再进行二次处理,即可渲染出我们想要的复杂表格。