<el-upload
action
accept=".xlsx,.xls"
:show-file-list="false"
:auto-upload="false"
:on-change="handles"
>
<template #trigger>
<el-button type="primary" >导入教师数据</el-button>
</template>
</el-upload>
// -----------------------
import * as XLSX from "xlsx";
const title = ref([]); //表头
const tableData = ref([]); //数据列表
// 把文件按照二进制进行读取
const readFile = (file) => {
return new Promise((resolve) => {
let reader = new FileReader();
reader.readAsBinaryString(file);
reader.onload = (ev) => {
resolve(ev.target.result);
};
});
}
// 选择文件的方法
const handles = async (ev) => {
store.enterz = 'Excel';
store.clickShow = '导入结果';
//每次选择文件都把之前文件清空
title.value = [];
tableData.value = [];
let file = ev.raw; //这里面就是数据
console.log("file", file);
// 将file变成二进制读取到的
let data = await readFile(file);
// 将得到的二进制转化一下
let workbook = XLSX.read(data, { type: "binary" });
console.log("workbook", workbook); //这里就是可读取的文件了
// 最后把数据转成json格式的
let worksheet = workbook.Sheets[workbook.SheetNames[0]]; //这里是表格的名字,这里取第一个表格,1就是第二个表格数据
console.log("worksheet", worksheet);
//将得到的worksheet转化为json格式
data = XLSX.utils.sheet_to_json(worksheet);
console.log("data", data);
// 这个是表格所有的标题
for (const key in data[0]) {
title.value.push(key); //获取的是标题,即每个对象的键名
}
console.log("title", title.value);
data.forEach((item, index) => {
let obj = {};
title.value.forEach((item2, index2) => {
console.log("item", item[item2]);
obj["in" + index2] = item[item2];
});
tableData.value.push(obj);
});
console.log("tableData.value", tableData.value);
tableData.value.forEach((item, index) => {
item.flag = false;
item.id = index + 1;
item.realName = item.in0;
item.password = item.in3;
item.phone = item.in1;
item.userName = item.in2;
item.depart_id = item.in4;
delete item.in0;
delete item.in1;
delete item.in2;
delete item.in3;
delete item.in4;
});
management.Excels(tableData.value);
};