当前位置:首页 > 技术文档 > 正文内容

Vue 加载本地Excel实时预览

admin4年前 (2022-01-24)技术文档169
#template

<template>
   <div>
        <input type="file" id="files" ref="upload" accept=".xls,.xlsx" style="display: none">
        <el-button slot="trigger" type="warning" @click="clickLoad" style="margin-right: 20px">从Excel加载</el-button>
   </div>
</template>


methods(){
    clickLoad() {
      this.$refs.upload.dispatchEvent(new MouseEvent('click'))
    },
    readExcel(e) {//表格导入
      let that = this;
      const files = e.target.files;
      let validRule = /\.(xls|xlsx)$/
      if (files.length <= 0) {//如果没有文件名
        return false;
      } else if (!validRule.test(files[0].name.toLowerCase())) {
        this.$Message.error('上传格式不正确,请上传xls或者xlsx格式');
        return false;
      }
      const fileReader = new FileReader();
      fileReader.onload = (e) => {
        try {
          const data = e.target.result;
          const workData = XLSX.read(data, {
            type: 'binary'
          });
          // console.log(workData)// 文件的内容
          const wsName = workData.SheetNames[0];//取第一张表
          const ws = XLSX.utils.sheet_to_json(workData.Sheets[wsName]);//生成json表格内容
          // console.log(ws);  //自第二行开始的内容
          //{  这里可以做相应的处理 }
          //{  这里可以做相应的处理 }
          // console.log("table:", this.tablesData)
          for (let i = 0; i < this.tablesData.length; i++) {
            let item = this.tablesData[i]
            let allKey = Object.keys(item)
            for (let j = 0; j < ws.length; j++) {
              let item2 = ws[j]
              let key1 = item['a'] + "_" + item['b'] + "_" + item['c']
              let key2 = item2['a'] + "_" + item2['b'] + "_" + item2['c']
              if (key1 === key2) {
                for (let key of allKey) {
                  //只对20开头的key做值更新
                  if (key.indexOf("20") === 0) {
                    console.log("key1:", key1, "key2:", key2, "key:", key, "value:", item2[key])
                    this.$set(this.tablesData[i], key, item2[key])
                  }
                }
              }
            }
          }
          this.$refs.upload.value = ''; // 处理完成 清空表单值
        } catch (e) {
          this.$message.error("解析表格失败")
          return false;
        }
      };
      fileReader.readAsBinaryString(files[0]);
    }

},

mounted(){
    //注册事件
    this.$refs.upload.addEventListener('change', e => {
          this.readExcel(e)
    })
}


分享到:

扫描二维码推送至手机访问。

版权声明:本文由云河空间发布,如需转载请注明出处。

本文链接:https://yuyunhe.cn/index.php/post/314.html

分享给朋友:

“Vue 加载本地Excel实时预览” 的相关文章

php 获取客户端的ip、地理信息、浏览器信息、本地真实ip

<?php  // 作用取得客户端的ip、地理信息、浏览器http://blog.qita.in  class get_gust_info {        ////获得访客浏...

用php gettext库来开发多语言系统

用php gettext库来开发多语言系统

通常人们写程序时都是将文字写死在程序里的, 比如:echo "Hello World!";  ,假如要改成它国语言,写国际化程序,就要逐个打开进行修改,程序较短时还行,若程序有上万甚至更多,改起来就不是那么容易了。近来随着i18n的逐渐标 准化,我也来讲一讲在PHP中如...

php利用百度地图API进行IP定位和GPS定位

最 近在做一个手机端的webapp地图应用,而核心内容当然是定位了,但是定位的话有几种方式,IP定位,GPS定位,基站定位(这个貌似webapp用不 了), 那么剩下核心的gps定位和ip定位了,我们知道,html5有定位API,但是该API拿到的GPS数据是硬件坐标,无法直接显示在地图上。...

jQuery结合PHP+MySQL实现二级联动下拉列表[实例]

jQuery结合PHP+MySQL实现二级联动下拉列表[实例]

二级联动的实现方法还真不少,实用性也很强,这里结合一个学生信息表的实例,来分享一下我的实现过程实现原理:根据省份值的变动,通过jQuery把sf_id传给后台php文件处理,php通过查询MySQl数据库,得到对应的地市名,并返回JSON数据给前端处理,即实现联动效果!为便于讲解,这里直接给出省份:...

js 实现页面打印功能

     要实现页面打印功能。这个需求往往听起来挺复杂,挺高级的,其实没那么难,下面本文分享一种超简单的方法实现页面的打印功能, 不仅可以打印整个页面,还可以打印页面某块区域。下面是具体的实例代码:    &nb...

LNMP一键安装包安装以及常用的SSH命令使用整理

LNMP一键安装包安装以及常用的SSH命令使用整理

如果我们使用Linux VPS主机肯定会有接触到一键安装包,比如我们接触较多的就是LAMP、LNMP、LLSMP等。麦子翻看以前的文章毕竟分享的虚拟主机较多一些,VPS 主机类的教程相对少很多(基本没有),以后在分享到一些VPS主机优惠的时候穿擦会有从基础到提升的VPS教程,一来是自己学习的记...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。