github编辑

Vue3 上传 Excel 文件

一、安装 axios

1.1 安装 axios

npm install axios -S

1.2 安装 vue-axios

npm install vue-axios -S

package.json 中的 dependencies检查是否成功安装好。

1.3 全局引入 axios

main.jsimport 和引入。

import axios from 'axios'

const app = createApp(App)

// 引入
app.config.globalProperties.$axios = axios

二、编写上传界面

<template>
  <el-upload
      ref="uploadRef"
      class="upload-demo"
      action="/uploadExcel"
      accept=".xls,.xlsx,.csv"
      :on-success="handleFileUploadSuccess"
      :on-change="handleChange"
      :before-upload="handleBeforeUpload"
      :auto-upload="false"
      :limit="5"
      :file-list="fileList"
  >
    <template #trigger>
      <el-button type="primary">选择 Excel 文件</el-button>
    </template>

    <el-button class="ml-3" type="success" @click="submitUpload">
      生成
    </el-button>
  </el-upload>
</template>


export default {
  name: 'App',
  components: {
    HelloWorld
  },
  data(){
    return {
      fileList: [],   // 定义一个空数组
    }
  },

  methods: {
		
    /**
     * 上传之前的处理
     * @returns {boolean}
     */
    handleBeforeUpload(rawFile) {
      return true;
    },


    /**
     * 上传成功的处理
     */
    handleFileUploadSuccess(file){
    },

    /**
     * 提交上传的文件
     */
    submitUpload(){
      // 判断是否有文件再上传
      if (this.fileList.length === 0) {
          return this.$message.warning('请选取文件后再上传')
      }
      // 下面的代码将创建一个空的 FormData 对象:
      const formData = new FormData();
			
			// 参数的键名为 'file'
      this.fileList.forEach((file) => {
          formData.append('file', file.raw);
      })
			
			// 通过 axios 进行上传
			// uploadExcelFile 后端处理的路径
      this.params = formData;
      axios({
        method: 'post',
        url: 'http://localhost:8080/uploadExcelFile',
        data: this.params,
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded'
        }
      })
    },

    /**
     * 过滤上传的文件类型
     */
    handleChange(file, fileList){
      if (!/\.(xlsx|xls|XLSX|XLS|csv)$/.test(file.name)) {
        this.$message({
          type: 'warning',
          message: '上传文件只能为 Excel 文件!'
        })
        this.fileList = []
        return false
      }
      // 手动上传需要保存 file.raw
      this.file = file.raw 
    }
  }
}
</script>

三、后端处理 Post 请求

3.1 后端处理函数

file 就是传递过来的 Excel 文件。

为了获取到 Excel 里面的值,我们还需要一个 Excel 处理框架,我选择了阿里的 easyExcel

3.2 添加 dependency

一块添加 fastjson后面会用来处理获取到的数据,把它 json化。

3.3 创建 Excel 文件的实体类 ExcelEntity.java

这个会将 Excel 文件中列的数据与类的字段绑定在一块,按照声明的顺序,如果不想按照顺序可以使用 @ExcelProperty("列名")来绑定在一块。

3.4 创建 ExcelEntityListener.java 监听器

3.5 创建 UploadDao.java

目前没有使用,后续可以存到数据库里。

四、结果展示

4.1 本地 Excel 测试数据

订单号
外部订单号
订单商品状态
交易成功时间
商品名称
商品类型
商品类目
商品规格
规格编码
商品编码
商品单价
商品成本价
商品优惠方式
商品优惠后价格
商品数量
商品金额小计
店铺优惠(分摊)
商品实际成交金额
商品抵用积分数
商品留言
收货人/提货人
收货人手机号/提货人手机号
收货人省份
收货人城市
收货人地区
详细收货地址/提货地址
买家备注
商品发货状态
商品发货方式
商品发货物流公司
商品发货物流单号
发货员工
商品发货时间
商品退款状态
商品已退款金额
商家订单备注
入住时间

E20220331142238091806171

C1728795398635640

待发货

Muchshow美腹贴 塑形新科技

普通类型商品

其他

美腹贴女士2盒

278.8

278.8

1

278.8

69.20(分销商等级折扣:47.80)

348

0

孙悟空

13666666666

云南省

昆明市

盘龙区

云南省昆明市盘龙区佛寺

未发货

快递

0

E20220330182239081300015

C1728719896969425

待发货

【环保袋中的爱马仕】德国单肩时尚环保袋 超轻便携 创意礼品 博物馆系列

普通类型商品

其他

麦田

73.5

73.5

1

73.5

24.50(分销商等级折扣:9.80)

98

0

猪八戒

13999999999

山东省

淄博市

张店区

山东省淄博市张店区佛寺

未发货

快递

0

4.2 上传

image.png 点击选择 Excel 文件,将本地 Excel 文件上传,然后点击生成。

4.3 log 输出的 Excel 数据

最后更新于