结合【ant design vue Upload组件】解析excel文件上传

upload组件默认的上传方法是不能很好的解析.xlsx, .xls文件的,下面来介绍结合ant design vue Upload组件解析excel的方法。
ant design vue Upload组件官方文档
首先是组件参数的设置,

<a-upload
          name="file"    //发到后台的参数名
          :multiple="true"	 //支持多选文件
          :showUploadList="false"   //不展示uploadList
          accept=".xlsx, .xls"	//设置接受上传的文件类型
          :customRequest="fileUpload"	//自定义函数覆盖掉组件默认的上传行为
        >
	<a-button  type="success" icon="download">Excel上传</a-button>
</a-upload>

这一步关键就是设置customRequest参数,接下来就是对上传的文件进行解析

1、封装上传文件的函数:这里用到FileReader Web API接口,感兴趣可以看fileReader官方文档,这里不再赘述

function upload(file){
  return new Promise(resolve=>{
      let reader = new FileReader()
      reader.readAsBinaryString(file);//读取文件的原始二进制数据
      reader.onload = ev=>{
          resolve(ev.target.result)
      }
  })
}

2、我们需要安装xlsx插件
下载插件:

npm install --save xlsx

在项目中引入:

import xlsx from 'xlsx';

3、开始正题,解析xlsx文件

async fileUpload(info) {
   let file = info.file;//info是组件为你解析好的数据
   if (!file) return;
   
   let reader = await upload(file);
   const worker = xlsx.read(reader, { type: 'binary' }); //设置数据类型为binary二进制
     // 这个是将数据进行一步拼接
     // 将返回的数据转换为json对象的数据
     let arr = [];
     worker.SheetNames.forEach((el) => {
       let temp = xlsx.utils.sheet_to_json(worker.Sheets[el]);
       temp.forEach((item) => {
         Object.keys(item).forEach((el) => {
           item[el] = String(item[el]);
         });
       });
       arr.push(temp);
     });
     
     info.file.status = 'done';//将文件上传状态改为‘done’,
     info.onSuccess();//结束上传
     let data = {
       list: arr, //按照后端要求格式上传
     };
     api.importexcel(data).then((res) => {//调接口
       if (res.code == 200) {
         this.$message.success('导入数据成功');
       }
     });
 },

info为选择文件上传后,组件解析好的信息,我们将主要用到的file打印出来如下:
在这里插入图片描述

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
你可以使用Ant Design的上传组件,在Vue 3中进行父组件调用。首先,你需要在父组件引入Ant DesignUpload组件: ``` <template> <div> <a-upload :action="uploadUrl" :headers="headers" :data="data" :multiple="multiple" :before-upload="beforeUpload" :on-progress="onProgress" :on-success="onSuccess" :on-error="onError" :disabled="disabled" > <a-button> <a-icon type="upload"></a-icon> Click to Upload </a-button> </a-upload> </div> </template> <script> import { defineComponent } from 'vue'; import { Upload, Button, Icon } from 'ant-design-vue'; export default defineComponent({ name: 'ParentComponent', components: { 'a-upload': Upload, 'a-button': Button, 'a-icon': Icon }, data() { return { uploadUrl: 'https://www.example.com/upload', headers: {}, data: {}, multiple: true, disabled: false }; }, methods: { beforeUpload() { // Do something before upload }, onProgress() { // Do something on progress }, onSuccess() { // Do something on success }, onError() { // Do something on error } } }); </script> ``` 在父组件中,你需要设置上传组件的一些属性,例如上传的URL、请求头、数据、是否允许多文件上传、是否禁用等等。你还需要定义一些上传的回调函数,例如在上传之前执行的函数、上传进度更新函数、上传成功回调函数、上传失败回调函数等等。 在模板中,你可以使用`<a-upload>`标签来引用Ant Design的上传组件。你还可以使用`<a-button>`标签和`<a-icon>`标签来设置上传按钮的样式。 在子组件中,你可以使用`$emit`函数来触发父组件中定义的回调函数。例如,在上传成功时,你可以使用以下代码触发`onSuccess`函数: ``` this.$emit('on-success'); ``` 在父组件中,你可以使用`@`符号来绑定子组件触发的事件。例如,你可以使用以下代码来绑定上传成功事件: ``` <a-upload ... @on-success="onSuccess" > ``` 这样,当子组件触发上传成功事件时,父组件中定义的`onSuccess`函数就会被调用。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值