Vue中excel导出-导入-查看导入(注:二进制转blob

注意:有时候数据可能是二进制流,不方便直接下载,所以需要转 blob,方法如下

通过配置项:告诉axios将下面得请求的返回数组,处理成 blob 类型。

项目中会用到下载excel表格-再上传-点击后查看上传的excel表格

export function saveAs(blob, filename) {
  const url = window.URL.createObjectURL(blob) // 创建一个临时的 URL 对象
  const a = document.createElement('a') // 创建一个 <a> 元素
  a.href = url // 设置 a 链接为临时 URl
  a.download = filename // 下载文件的名字
  a.click() // 模拟点击操作触发下载
  window.URL.revokeObjectURL(url)
}

这个方法就是通过创建临时的 URL 对象,再创建一个a标签-设置为临时的 URL -设置文件名字

再释放这个临时创建的 URL 对象

这时候就需要发请求拿数据-再通过这个函数方法实现下载表格文件

①下载excel文件

 async exportExcel() {
      const result = await exportEmployeeExecel()
      saveAs(result, '员工信息表.xlsx')
    }

exportEmployeeExecel是封装请求的方法-saveAs就是下载的方法

这个时候我们就实现了下载文件的功能。

②:导入填写好的excel文件-上传

用到element组件库的上传文件-给导入添加点击事件-通过ref/refs绑定上传文件

<el-row type="flex" justify="center">
      <div class="upload-excel">
        <input
          ref="excel-upload-input"
          class="excel-upload-input"
          type="file"
          accept=".xlsx, .xls"
          @change="onFileChange"
        >
        <div class="drop">
          <i class="el-icon-upload" />
          <el-button type="text" @click="download">下载导入模板</el-button>
          <span>将文件拖到此处或
            <el-button type="text" @click="$refs['excel-upload-input'].click()">点击上传</el-button>
          </span>
        </div>

这个是封装的方法(参考)

监听change事件 被方法处理,判断用户有没有选择文件-通过提示将成功/错误的信息提示给用户-

然后再自动清空表单的数据。

// 当用户选择完文件后,触发change事件  被onFileChange处理
    onFileChange(e) {
      if (!e.target.files.length) return // 判断有没有选中文件
      console.log(e.target.files)
      const file = e.target.files[0]  //将用户选择的第一个文件赋值给变量
      const formData = new FormData() //创建一个新的 FormData对象,用于将文件数据添加到表单中
      //通过调用 append 方法将文件添加到 FormData 中,以便后续使用
      formData.append('file', file)

      uploadExcel(formData)
        .then(() => {
          this.$message.success('恭喜你,导入成功')
          this.$emit('done')
          // 关闭弹框
          this.$emit('update:showExcelDialog', false)
        })
        .catch(() => {

        })
        .finally(() => {
          e.target.value = ''
        })
    }

③下载(查看)导入的(根据场景 如果本地没有保存的表格则可以通过下载导入的表格)

async download() {
      const result = await downloadTemplate()
      saveAs(result, '员工信息表模版')
    },

添加点击事件后 用户点击后就可以下载excel文件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值