使用xlsxjs实现上传表格并解析数据

本文介绍如何利用xlsx.js结合Vue与iView实现文件上传并解析Excel表格数据。通过FileReader读取文件流,使用xlsx.js将XLSX文件转换为JSON格式,方便进一步处理。文中还详细介绍了xlsx.utils.sheet_to_json方法的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于XLSXJS使用记录

使用xlsx.js + vue + iview实现上传表格

  1. 先使用upload组件实现上传文件,可用其他方式替代
  2. 拿到文件流之后就可以用FileReader读取文件了
  3. 读取文件之后使用xlsx将数据读取为binary格式
  4. 将文件使用xlsx.utils.sheet_to_json读取为json格式
  5. 然后就可以根据自己需要解析数据了

上代码

// 处理文件上传
    handleUpload(file) { //这里为vue上传文件时拿到文件流的回调函数
      if (!this.validateFormat(file.name)) return false // 验证格式

      // 初始化状态
      this.loadingStatus = true
      this.$emit('startImport')

      var reader = new FileReader() //创建FileReader实例

      const $t = this //映射this

      reader.onload = function(e) {
        var data = e.target.result

        //使用xlsx读取文件
        if ($t.RAS) {
          $t.wb = XLSX.read(data, {
            type: 'binary',
          })
        } else {
          $t.wb = XLSX.read($t.fixdata(data), {
            type: 'binary',
          })
        }

        // 读取每个sheet的数据
        const jsons = []
        for (const sheetName of $t.wb.SheetNames) {
          //解析成json数据
          // const json = XLSX.utils.sheet_to_json($t.wb.Sheets[sheetName])
          const json = XLSX.utils.sheet_to_json($t.wb.Sheets[sheetName], {
            header: 'A',
            raw:true
          })
          jsons.push(json)
        }

        

        // 处理读取后的json数据
        const objData = $t.analyzeData(jsons)

        // 结束状态
        $t.loadingStatus = false

        $t.$emit('finishImport', objData)
      }
      //读取文件
      if (this.RAS) reader.readAsBinaryString(file)
      else reader.readAsArrayBuffer(file)

      return false
    },

关于xlsx.utils.sheet_to_json的参数

    /** Converts a worksheet object to an array of JSON objects */
    sheet_to_json<T>(worksheet: WorkSheet, opts?: Sheet2JSONOpts): T[];
    sheet_to_json(worksheet: WorkSheet, opts?: Sheet2JSONOpts): any[][];
    sheet_to_json(worksheet: WorkSheet, opts?: Sheet2JSONOpts): any[];
  1. 第一个参数为需要解析的表格sheet数据

  2. 第二个参数为各种选项,是一个对象

    若没有第二个参数,并且表格中没有合并单元格

    获取的数据将是这样的

    [
      [
        {
          "表头1": "值1",
    			"表头2": "值2",
    			"表头3": "值3",
    			"表头4": "值4",
    			"表头5": "值5",
        },
        {
          "表头1": "值1",
    			"表头2": "值2",
    			"表头3": "值3",
    			"表头4": "值4",
    			"表头5": "值5",
        },
      ]
    ]
    
    • header

      该参数可以设置表头,类型可以是数字,字符串,数组

      目前只知道可以传 1、‘A’、[…]

      const json = XLSX.utils.sheet_to_json($t.wb.Sheets[sheetName], {header: 'A'})
      
      //json数据将是这样的 有合并单元格将会不同,自己合理调整就可以
      [
        [
          {
            "A": "表头1",
      			"B": "表头1",
      			"C": "表头1",
      			"D": "表头1",
      			"E": "表头1",
      			"F": "表头1",
          },
          {
            "A": "值1",
      			"B": "值1",
      			"C": "值1",
      			"D": "值1",
      			"E": "值1",
      			"F": "值1",
          }
        ]
      ]
      
      
      const json = XLSX.utils.sheet_to_json($t.wb.Sheets[sheetName], {header: 1})
      
      const json = XLSX.utils.sheet_to_json($t.wb.Sheets[sheetName], {header: ['num', 'name', 'tel', 'address'],})
      
      
    • raw

    • Range

      range指的是解析范围,并没有深入研究

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值