js读取excel,xlsx,xls 表格,转成JSON数据

使用 js-xlsx 插件:https://github.com/SheetJS/js-xlsx

HTML内容
在这里插入图片描述
创建input type为file 文件上传格式 绑定change事件 通过change事件获取到上传文件的内容

JS内容

<script>
import XLSX from 'xlsx';
export default {
  data() {
    return {
    控制上方弹窗是否显示
      dialogVisible:false,
      // 进度条
      JinDu:0
    };
  },
这里是监视dialogVisible发生变化调用methods内声明的QingKong方法
  watch:{
    dialogVisible(){
      if(this.dialogVisible==false){
        this.QingKong()
      }
    }
  }
  methods: {
  这里是防止用户上传文件后改动文件内容再次点击上传不触发change事件做的清空事件
    QingKong(){
      this.$refs.readFile.value = '';
      this.JinDu=0;
    },
    这里是解析xls xlsx表格内容转为JSON格式
    readFile(e) {
      const files = e.target.files;
      //如果没有文件名
      if(files.length<=0){
        return false;
      }else if(!/\.(xls|xlsx)$/.test(files[0].name.toLowerCase())){
        console.log('文件传格式不正确');
        return false;
      }
      const fileReader = new FileReader();
      fileReader.onload = (ev) => {
        try {
          const data = ev.target.result;
          const workbook = XLSX.read(data, {
            type: 'binary'
          });
          const wsname = workbook.SheetNames[0];//取第一张表
          const ws = XLSX.utils.sheet_to_json(workbook.Sheets[wsname]);//生成json表格内容
          // console.log('JOSN转化结果:',ws);
          for(let i = 0; i < ws.length; i ++) {
            ws[i].出生年月 = this.formatDate(ws[i].出生年月, '-')
            this.JinDu=Math.round(i / ws.length *100);
            // console.log(this.JinDu);
          }
          console.log(ws)
        } catch (e) {
          return false;
        }
      };
      fileReader.readAsBinaryString(files[0]);
    },
    这里是日期转换方
    formatDate(numb, format) {
      const time = new Date((numb - 1) * 24 * 3600000 + 1)
      time.setYear(time.getFullYear() - 70)
      const year = time.getFullYear() + ''
      const month = time.getMonth() + 1 + ''
      const date = time.getDate() - 1 + ''
      if (format && format.length === 1) {
        return year + format + (month < 10 ? '0' + month : month) + format + (date < 10 ? '0' + date : date)
      }
      return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date)
    },
   };
</script>

转为JSON数据后的效果图 欢迎参考

在这里插入图片描述

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值