el-upload上传文件前端自己读取excel

news/2024/4/30 18:03:45

1.读取方法 需要下载xlsx依赖 

export const readExcelFile = (file) => {return new Promise((resolve, reject) => {let reader = new FileReader();reader.readAsBinaryString(file.raw);reader.onload = (ev) => {try {let dataBinary = ev.target.result;let workBook = XLSX.read(dataBinary, { type: "binary", cellDates: true });let workSheet = workBook.Sheets[workBook.SheetNames[0]];const data = XLSX.utils.sheet_to_json(workSheet); //这里已经能拿到转换后的jsonresolve(data);} catch (err) {reject(err);}};reader.onerror = (ev) => {reject("文件读取失败");};});
};

 2.使用

<el-upload action=""accept=".xls,.xlsx"ref="uploadVm":auto-upload="false":show-file-list="false":limit="1":on-exceed="handleExceed":on-change="handleFileChange"><div class="btn fr_c fj_c cp" slot="reference">导入销售机会 /></div>     
</el-upload>
        //文件超出覆盖handleExceed(files, fileList) {this.$set(fileList[0], "raw", files[0]); //raw就是指文件this.$set(fileList[0], "name", files[0].name); //name就是指文件名this.$refs.uploadVm.clearFiles(); //删除所有上传的文件this.$refs.uploadVm.handleStart(files[0]); //handleStart()指的是手动选择文件,Element Plus 的el-upload有说明},//change事件handleFileChange(file) {readExcelFile(file).then((data) => {let excelData = data.map((item) => {return {saleName: item["销售机会名称"],customerName: item["客户名称"],};});}).catch((err) => {this.$message.error("文件读取失败");this.$refs.uploadVm.clearFiles();});},

如果后端配合可以通过前端传递formData对象 后端返回list那就不需要前端读取了

//点击文件上传
const handleFileChange = debounce((file, fileArr) => {noDatauploadRef.value && noDatauploadRef.value.clearFiles();uploadRef.value && uploadRef.value.clearFiles();if (!checkFileSize(fileArr)) return;//整理form对象let formData = new FormData();fileArr.forEach((fileItem) => {formData.append("files", fileItem.raw);});formData.append("batchId", batchId.value);//整体校验接口 获取文件状态upLoadToHttp(formData).then((resList) => {if (!resList.length) {ElMessage.error("获取文件列表为空");return;}fileArr.forEach((item, index) => {state.fileList.push({...resList[index],...fileArr[index],fileType: item.name.slice(item.name.lastIndexOf(".")),fileName: item.name.slice(0, item.name.lastIndexOf(".")),});});});
}, 300);// 多个文件时上传方法会调用多次 因为配置了手动上传 before-upload不生效
const checkFileSize = (fileArr) => {//文件数量限制if (fileArr.length > 10) {ElMessage.error("上传文件数量最多10个!");return false;}//文件大小限制let allfileSizeNum = fileArr.map((fileItem) => {return fileItem.size;}).reduce(function (prev, curr) {return prev + curr;}, 0);const is20M = allfileSizeNum / 1024 / 1024 < 20;if (!is20M) {ElMessage.error("上传文件总大小不能超过20MB!");return false;}return true;
};

限制文件类型可以在el-upload上的accept限制  但是上传时用户可以自己修改上传的文件类型为所有文件类型 所以拦截不住可以在change事件加一下拦截

  //校验文件类型const fileName = file.name;const fileType = fileName.substring(fileName.lastIndexOf("."));if (fileType != ".xls" && fileType != ".xlsx") {this.$message.error("文件格式错误,请导入excel文件");return false;}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/11398.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

第三篇:3.2 广告可见性 - IAB与MRC及《增强现实广告效果测量指南1.0》

翻译计划 第一篇 概述—IAB与MRC及《增强现实广告效果测量指南》之目录、适用范围及术语第二篇 广告效果测量定义和其他矩阵之- 3.1 广告印象&#xff08;AD Impression&#xff09;第三篇 广告效果测量定义和其他矩阵之- 3.2 可见性 &#xff08;Viewability&#xf…

uniApp使用XR-Frame创建3D场景(7)加入点击交互

上篇文章讲述了如何将XR-Frame作为子组件集成到uniApp中使用 这篇我们讲解如何与场景中的模型交互&#xff08;点击识别&#xff09; 先看源码 <xr-scene render-system"alpha:true" bind:ready"handleReady"><xr-node><xr-mesh id"…

深圳区块链交易所app系统开发,撮合交易系统开发

随着区块链技术的迅速发展和数字资产市场的蓬勃发展&#xff0c;区块链交易所成为了数字资产交易的核心场所之一。在这个快速发展的领域中&#xff0c;区块链交易所App系统的开发和撮合交易系统的建设至关重要。本文将探讨区块链交易所App系统开发及撮合交易系统的重要性&#…

WebAR开发简介

WebAR 开发使企业能够以独特且高度有趣的方式向客户和员工提供信息。 它提供增强现实 (AR) 内容&#xff0c;人们在智能手机上将其视为视觉叠加。 然而&#xff0c;WebAR 可在手机的普通网络浏览器上运行&#xff0c;无需下载任何应用程序。 WebAR 的多种用途包括帮助零售和在…

数码管时钟--LABVIEW编程

一、程序的前面板 1.获取系统时钟&#xff0c;年月日&#xff0c;时分秒&#xff0c;用14个数码管显示。 2.闹钟设定小时和分钟。 二、程序的后面板 三、程序运行图 四、程序源码 源程序可以在百度网盘自行下载&#xff0c;地址链接见下方。 链接&#xff1a;https://pan.b…

外包干了4年,技术退步明显。。。。

说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入上海某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&a…