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

Vue 加载本地Excel实时预览

admin4年前 (2022-01-24)技术文档170
#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实时预览” 的相关文章

git的几个小技巧

git的几个小技巧

分享git的几个小技巧,后面会根据使用补充。目前包括git撤销本地修改、git回退到前n个版本、git多用户提交冲突解决、git 命令简化。欢迎大家补充^_*1、git撤销本地修改 Java git reset --hard origin/ma...

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...

TP 查询缓存

<?php     function cache_data($sql){             $SqlDao&nbs...

php取整函数ceil,floor,round,intval函数的区别

开发过程中,遇到数据处理取整的时候,你会用哪个呢,小涛来介绍一下:PHP取整函数有ceil,floor,round,intval,下面详细介绍一下:1、ceil — 进一法取整说明float ceil ( float $value )返回不小于 ...     ...

PHP实现百度、网易、新浪短网址服务的API接口调用

[导读] 看了几个短网址API服务,于是把它们整理出来,方便以后使用,目前,提供靠谱的短网址API接口的公司不多(谷歌、百度、新浪微博、网易等),而像腾讯微博、淘宝这几个巨头的短网址服务都是...    PHP实现百度、网易、新浪短网址服务的API接口调用  ...

发表评论

访客

看不清,换一张

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