国际化,将excel表格内容输出,生成自己想要的数据格式

 要安装 xlsx库,引入import XLSX from 'xlsx'

<input
      ref="excel-upload-input"
      class="excel-upload-input"
      type="file"
      accept=".xlsx, .xls, .csv"
      @change="handleClick"
    />
handleUpload() {
      this.$refs['excel-upload-input'].click();
    },
    handleClick(e) {
      const files = e.target.files;
      const rawFile = files[0]; // only use files[0]
      if (!rawFile) return;
      this.upload(rawFile);
    },
    upload(rawFile) {
      this.$refs['excel-upload-input'].value = null; //
      this.readerData(rawFile);
    },
    readerData(rawFile) {
      return new Promise((resolve, reject) => {
        const reader = new FileReader();
        //使用FileReader对象, FileReader通过异步的方式读取文件内容,结果均是通过事件回调获取
        reader.onload = e => {
          const data = e.target.result;
          // 获取workbook对象,读取excel主要是通过XLSX.read(data, {type: type});方法来实现,返回一个叫WorkBook的对象 type为array是 Uint8Array,8位无符号数组
          const workbook = XLSX.read(data, { type: 'array' })
          const firstSheetName = workbook.SheetNames[0] // 是获取Sheets中第一个Sheet的名字
          const worksheet = workbook.Sheets[firstSheetName] // 获取第一个Sheet的数据
          const results = XLSX.utils.sheet_to_json(worksheet);  // 输出JSON格式
          const header = this.getHeaderRow(worksheet)
          this.generateData({ header, results })  // 处理数据
          resolve()
        };
        reader.onerror = e => {
          console.log(e, '4')
          reject(e)
        }
        // 以ArrayBuffer方式打开文件  读取本地文件
        reader.readAsArrayBuffer(rawFile)
      })
    },
    // 获取表头row
    getHeaderRow(sheet) {
      const headers = []
      const range = XLSX.utils.decode_range(sheet['!ref'])  //sheet['!ref']:表示所有单元格的范围,例如从A1到F8则记录为A1:F8
      let C
      const R = range.s.r
      /* start in the first row */
      for (C = range.s.c; C <= range.e.c; ++C) { /* walk every column in the range */
        const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })]
        /* find the cell in the first row */
        let hdr = 'UNKNOWN ' + C // <-- replace with your desired default
        if (cell && cell.t) hdr = XLSX.utils.format_cell(cell)
        headers.push(hdr)
      }
      return headers
    },
    generateData({ header, results }) {
      let arr = []
      results.map(item => {
        arr.push({
          [item['名称2']]: item['ying']
        })
      })
      console.log(JSON.stringify(arr).replace(/\{|\}/g, ''))
    },

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值