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

Vue 加载本地Excel实时预览

admin4年前 (2022-01-24)技术文档162
#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)
    })
}


分享到:

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

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

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

分享给朋友:

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

如何快速去除代码前的行号

如何快速去除代码前的行号...

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

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

dz第三方模块添加方法

dz第三方模块添加方法

使用dz做网站的朋友有时候会用到第三方模块专题,这就会遇到一个模块通信的问题,可是弄了半天就是“数据无法识别,请返回”, 也够雷人的,ok,这你就给大家分享下本人的一点经验,以供大家参考!dz第三方模块添加方法...

图文解说Navicat使用ssh方式连接远程MySql服务器

图文解说Navicat使用ssh方式连接远程MySql服务器

如何使用Navicat 8.0 for MySQL连接公司服务器的数据库,但我也是第一次接触这个软件,搞了半天也没连上,在网上找了很多解决的办法,其中就有使用ssh方式连接的,但写的不够详细,因此还是费了一番功夫,自己搞定的,不敢独享,特记录下来 与大家分享。首先,在Navicat的连接设置里选择S...

jQuery UI 使用入门

jQuery UI 使用入门

 最近项目中使用了一些插件来做页面,这里把jQuery UI的使用分享出来,希望 对新手有帮助。文章结尾附源码下载。1 jQuery UI        有时你仅仅是为了实现一个渐变的动画效果而不得不把javascrip 重新学习一遍然后书写大量代码。直到...

PHP实现登陆后台限制到只允许一台机器在线

方法一:# <?php# ob_start();# session_start();# class CC{#   private $REFURL="http://www.php100.com";    //登陆成功后转换页面#   private $LoginFLAG=fa...

发表评论

访客

看不清,换一张

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