详解如何实现在Vue中导入Excel文件

 更新时间:2022年01月24日 15:49:44   作者:Survivor  
这篇文章主要介绍了如何在Vue中导入Excel文件,文中的示例代码讲解详细,对我们学习或工作有一定帮助,感兴趣的小伙伴可以跟随小编一起了解一下

以将此Excel导出为json数据为例

一、安装依赖

npm install file-saver --save
npm install xlsx --save
npm install script-loader --save-dev

二、template中

<span>导入表格</span>
<input id="upload" type="file" @change="importfxx()"  accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" />

三、script中js代码

methods:{
   // 处理导入Excel中日期问题
    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 + format + date;
      }
      return (
        year +
        (month < 10 ? "0" + month : month) +
        (date < 10 ? "0" + date : date)
      );
    },

    // 导入Excel
    importfxx() {
      let _this = this;
      let f = event.currentTarget.files[0];
      let rABS = false; //是否将文件读取为二进制字符串

      let reader = new FileReader();
      //if (!FileReader.prototype.readAsBinaryString) {
      FileReader.prototype.readAsBinaryString = function (f) {
        let binary = "";
        let rABS = false; //是否将文件读取为二进制字符串
        let wb; //读取完成的数据
        let outdata;
        let reader = new FileReader();
        reader.onload = function (e) {
          let bytes = new Uint8Array(reader.result);
          let length = bytes.byteLength;
          for (let i = 0; i < length; i++) {
            binary += String.fromCharCode(bytes[i]);
          }
          let XLSX = require("xlsx");
          if (rABS) {
            wb = XLSX.read(btoa(fixdata(binary)), {
              //手动转化
              type: "base64",
            });
          } else {
            wb = XLSX.read(binary, {
              type: "binary",
            });
          }
          outdata = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]); //outdata就是你想要的东西

          const keyObj = {
            序号: "id",
            情况跟踪: "track",
            日期: "date",
            标题: "title",
            状态: "status",
            结果: "result",
            预警: "warning",
          };

          outdata.forEach((item) => {
            // 将中文的键名替换成英文的
            for (let k in keyObj) {
              let newKey = keyObj[k];
              if (newKey) {
                item[newKey] = item[k];
                delete item[k];
              }
            }
            item["date"] = _this.formatDate(item["date"], "-");
          });
          console.log(outdata);
        };
        reader.readAsArrayBuffer(f);
      };
      if (rABS) {
        reader.readAsArrayBuffer(f);
      } else {
        reader.readAsBinaryString(f);
      }
    },
}

如上操作之后,打印结果是如下

到此这篇关于详解如何实现在Vue中导入Excel文件的文章就介绍到这了,更多相关Vue导入Excel文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue实现返回顶部按钮实例代码

    Vue实现返回顶部按钮实例代码

    这篇文章主要给大家介绍了关于Vue实现返回顶部按钮的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • vue3+element Plus实现表格前端分页完整示例

    vue3+element Plus实现表格前端分页完整示例

    这篇文章主要给大家介绍了关于vue3+element Plus实现表格前端分页的相关资料,虽然很多时候后端会把分页,搜索,排序都做好,但是有些返回数据并不多的页面,或者其他原因不能后端分页的通常会前端处理,需要的朋友可以参考下
    2023-08-08
  • 关于Vue源码vm.$watch()内部原理详解

    关于Vue源码vm.$watch()内部原理详解

    这篇文章主要介绍了关于Vue源码vm.$watch()内部原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • element自定义 多文件上传 触发多次on-change问题

    element自定义 多文件上传 触发多次on-change问题

    这篇文章主要介绍了element自定义 多文件上传 触发多次on-change问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • vue使用echarts画组织结构图

    vue使用echarts画组织结构图

    这篇文章主要介绍了vue使用echarts画组织结构图的示例,帮助大家更好的理解和使用vue框架,感兴趣的朋友可以了解下
    2021-02-02
  • 关于找到任意组件实例的方法

    关于找到任意组件实例的方法

    这篇文章主要介绍了关于找到任意组件实例的方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • vue+uniapp实现生成二维码

    vue+uniapp实现生成二维码

    这篇文章主要为大家详细介绍了vue结合uniapp实现生成二维码的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以学习一下
    2023-12-12
  • 误引用vuex-persistedstate导致用户信息无法清除问题及解决

    误引用vuex-persistedstate导致用户信息无法清除问题及解决

    这篇文章主要介绍了误引用vuex-persistedstate导致用户信息无法清除问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue打包更新packge.json版本号的全过程

    vue打包更新packge.json版本号的全过程

    这篇文章主要介绍了vue打包更新packge.json版本号的全过程,文章通过图文结合的方式给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-08-08
  • 关于vue中ref的使用(this.$refs获取为undefined)

    关于vue中ref的使用(this.$refs获取为undefined)

    这篇文章主要介绍了关于vue中ref的使用(this.$refs获取为undefined),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03

最新评论