Excel导入操作

html 复制代码
<template>
  <el-dialog
    width="500px"
    title="员工导入"
    :visible="showExcelDialog"
    @close="$emit('update:showExcelDialog', false)"
  >
    <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="uploadChange"
        />
        <div class="drop">
          <i class="el-icon-upload" />
          <el-button type="text" @click="getTemplate">下载导入模板</el-button>
          <span
            >将文件拖到此处或
            <el-button type="text" @click="handleUpload">点击上传</el-button>
          </span>
        </div>
      </div>
    </el-row>
    <el-row type="flex" justify="end">
      <!-- update:props属性名,值 直接修改 .sync修饰符的属性值 -->
      <el-button
        size="mini"
        type="primary"
        @click="$emit('update:showExcelDialog', false)"
        >取消</el-button
      >
    </el-row>
  </el-dialog>
</template>

点击上传-弹出文件选择框

html 复制代码
 <el-button type="text" @click="handleUpload">点击上传</el-button>
javascript 复制代码
methods:{
  // 上传
  handleUpload() {
    this.$refs["excel-upload-input"].click();// this.$refs.属性名 和 this.$refs[属性名] 等价
  },
}

监听文件改变-上传excel-关闭弹层

javascript 复制代码
 <input
     ref="excel-upload-input"
      class="excel-upload-input"
      type="file"
      accept=".xlsx, .xls"
      @change="uploadChange"
  >
  async uploadChange(event) {
      console.log(event.target.files)
      // 调用上传接口
      // uploadExcel() // 参数  form-data 需要文件file
      const files = event.target.files // input的文件列表
      if (files.length > 0) {
        // 大于0 说明有文件要上传
        const data = new FormData()
        // file: file类型
        data.append('file', files[0]) // 将文件参数加入到formData中
        try {
          await uploadExcel(data)
          // 成功
          this.$emit('uploadSuccess') // 通知父组件 我上传成功
          this.$emit('update:showExcelDialog', false) // 关闭弹层
          // this.$refs['excel-upload-input'].value = ''
        } catch (error) {
          // 捕获失败
          // this.$refs['excel-upload-input'].value = ''
        } finally {
          // 不论成功或者失败都会执行finally
          this.$refs['excel-upload-input'].value = ''
        }
      }
}
//接口
export function uploadExcel(data) {
  return request({
    url: "/sys/user/import",
    method: "post",
    data, // form-data类型 因为要上传文件类型
  });
}

上传成功

1、首先封装一个员工导入组件,利用elementUI提供的组件铺设静态页面,

2、给导入模板绑定点击事件,弹出弹层,封装下载Excel模板接口,调用接口,这里和导出一样,需要用到file-saver来下载模板。

3、给点击上传按钮绑定点击事件,这里我们使用的是模拟点击,其实真正被点击的是input文本框,由于它放置页面不太协调,所以采用模拟点击。

4、封装上传Excel模板文件接口,这里上传data必须是formdata类型,因为要上传文件类型,调用接口,监听change事件,当用户选择了文件,而且这个文件和上次的不一样,就会触发change,所以这里使用e.target.files,files是数组,如果files的长度大于0,说明有文件要上传,此时就把文件封装到formdata对象中,根据文档提示,这里需要file类型,然后将文件参数加入到formData中,成功就提示父组件刷新页面,关闭弹层,失败就清空文件,这里即使上传成功也一样要清空文件,所以使用finally来控制。

相关推荐
gtstore1 天前
从 Excel 迁移到仓库管理系统的数据准备与切换方案
excel·数据迁移·仓库管理系统·进销存·信息化实施
ms365copilot1 天前
我不再自己做 Word、Excel 和 PPT 了,我让 Copilot 直接帮我创建 (1)
word·powerpoint·excel·copilot
cspttty2 天前
2027采购岗求职:大数据管理与应用专业如何把Excel、SQL变成业务能力
excel
ms365copilot2 天前
Excel Copilot 一键定位修改的内容
excel·copilot
帆张芳显3 天前
前端表格公式能力新选择|智表 ZCell 公式引擎深度剖析
前端·excel·canva可画·excel插件
地图小课堂3 天前
Bigemap Pro 导入 Excel、CSV、TXT 点位表格教程
excel
我的愿望是成为富婆3 天前
2027校招准备:从Excel操作到数据分析,还缺业务、SQL与统计思维
sql·数据分析·excel
用户0332126663674 天前
Python 自动化办公:如何从零快速生成结构清晰的 Excel 报表
python·excel
千桐科技4 天前
qData 数据中台专业版功能解析:告别 Excel 与 SQL 拼凑,打通系统合并的可追踪数据链路
数据库·sql·excel·qdata
百事牛科技4 天前
从局部到整体:Excel限制功能的几种实用设置
windows·excel