vue+Element-ui 导入excel文件生成json数据

6 篇文章 0 订阅
3 篇文章 0 订阅

1.首先安装依赖

import XLSX from "xlsx";

2.建立读取excel文件的js文件,以便调用

// importExcel.js
import XLSX from 'xlsx';

export function readExcel(file) {
  return new Promise((resolve, reject) => {
    const types = file.name.split(".")[1];
    const fileType = [
      "xlsx",
      "xlc",
      "xlm",
      "xls",
      "xlt",
      "xlw",
      "csv",
    ].some((item) => item == types);
    if (!fileType) {
      return reject({ message: "格式错误!请重新选择" });
    }

    const reader = new FileReader();
    const result = [];
    reader.onload = function (e) {
      const data = e.target.result;
      const wb = XLSX.read(data, {
        type: "binary",
      });
      wb.SheetNames.forEach((sheetName) => {
        result.push({
          sheetName: sheetName,
          sheet: XLSX.utils.sheet_to_json(wb.Sheets[sheetName]),
        });
        resolve(result.length > 1 ? result : result[0].sheet);
      });
    };
    reader.onerror = function (error) {
      return reject(error);
    };
    reader.readAsBinaryString(file.raw || file);
  });
}
export function formatJson(header, filterVal, jsonData) {
  return jsonData.map((v) => {
    const obj = {};
    header.forEach((h, i) => {
      obj[[`${filterVal[i]}`]] = v[h];
    });
    return obj;
  });
}

3、然后在引入element-ui后,使用upload组件实现上传按钮

<el-upload
   class="upload-draw-log"
   ref="upload"
   action=""
   accept=".xlsx, .xls"
   :show-file-list="false"
   :http-request="uploadDrawLog"
   :on-change="onChange"
   :limit="1"
 >
   <el-button class="btn" type="primary"> 上传中奖名单 </el-button>
 </el-upload>

4、创建upload按钮调用的方法

async uploadDrawLog(e) {
  try {
    this.isLoading = true;
    const data = await readExcel(e.file);
    const header = [
      "会员id",
      "会员昵称",
      "素材id",
      "评论id",
      "充值卡密码",
      "期数",
    ];
    const filterVal = [
      "customerId",
      "nickName",
      "composeId",
      "commentId",
      "passwordCard",
      "periods",
    ];
    const _data = formatJson(header, filterVal, data);

    await WinningApi.uploadDrawLog(_data);
    this.isLoading = false;
  } catch (error) {
    console.error(error);
    this.isLoading = false;
    this.$message.error(error.message || error);
  }
  this.$refs.upload.clearFiles();
},
onChange(file, fileList) {
  console.log({ file, fileList });
},

参考文献:https://blog.csdn.net/weixin_42864357/article/details/104295187

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值