html内容:
<!--选择上传的Excel文件--> <input type="file" id="excel"ref="head" accept=".xls,.xlsx" @change="checkType()" multiple/> <!--点击上传Excel文件--> <button type="button" @click = "uploadExcel">导入Excel</button>
js:
上传部分:
//检查选中的文件是否是Excel文件
checkType() {
let vm = this;
let allImgExt = '.xls|.xlsx|';
let filePath = this.$refs.head.value;
let extName = filePath.substring(filePath.lastIndexOf(".")).toLowerCase();
if (allImgExt.indexOf(extName + '|') === -1) {
alert("请选择正确的Excel文件");
this.$refs.head.value = '';
excelContent = [];
return;
}
let file = this.$refs.head.files[0];
vm.readExcel(file);//预览选中的Excel文件信息
vm.excelContent = [];
}
//导入Excel文件
uploadExcel() {
let vm = this ;
let formData = new FormData();
let file = this.$refs.head.files[0];
if(file == "" || file == undefined){
alert("请选择要导入的Excel文件");
return;
}
formData.append('file', file);
console.log("userCode = ", this.token.userInfo.userCode)
//调用函数,把formData当做参数上传给后台的attchment微服务中的表格中
this.ctApi.post({
url: uploadExcel,
data: formData,
success: (data) => {
}
})
}
预览部分:把Excel文件的信息保存到excelContent 数组中,每一个元素就是一行excel数据
//预览要导入的excel readExcel(file) {// 解析Excel let _this = this; return new Promise(function(resolve, reject){// 返回Promise对象 const reader = new FileReader(); reader.onload = (e) => {// 异步执行 try { // 以二进制流方式读取得到整份excel表格对象 let data = e.target.result,workbook = XLSX.read(data, {type: 'binary'}); let batteryArr = []; var sheetNames = workbook.SheetNames // 工作表名称集合 _this.workbook = workbook _this.getTable(sheetNames[0]) } catch (e) { reject(e.message); } }; reader.readAsBinaryString(file); }); } //根据excel的表明,获取单元格内容 getTable (sheetName) { let vm =this; var worksheet = this.workbook.Sheets[sheetName]//获取整张excel表的内容 vm.excelContent = XLSX.utils.sheet_to_json(worksheet)//把获取的信息转换成接送字符串 }