如何利用JavaScript读取excel文件并绘制echarts图形

作者:SilentLove 时间:2023-08-27 07:51:16 

1、场景描述

  • 通常来说,前端要拿到excel数据,都是先上传存储数据库,然后再请求后端接口,获取数据。

  • 但有100个产品经理,就会有101个不同的需求。

  • 本文以自己的vue项目为例。

2、需求描述

  • 现有一张excel财务报表,需要根据这张excel表绘制成各种echarts图形,用于年度汇报。

  • 不经过后端,前端独立完成。

3、功能实现

首先,为了将excel数据绘制成echarts图表,前端得拿到excel数据。

这里我们借助js-xlsx.js库,安装xlsx:

cnpm i -S xlsx

你也可以cdn的方式直接引用:

<script src="http://oss.sheetjs.com/js-xlsx/xlsx.full.min.js"></script>

首先你需要读取excel文件:

<input type="file" id="excel-file">

添加响应事件change获取excel数据:

<input type="file" id="excel-file" @change="updateFile">

通过updateFile接受数据

updateFile(e) {
  let files = e.target.files;
  console.log(files)
}

得到files,说明我们已经获取到上传的excel文件。现在我们需要将files转化成我们熟悉的数组类型。 我们使用fileReader方法。

FileReader共有4种读取方法:

  • 1.readAsArrayBuffer(file):将文件读取为ArrayBuffer。

  • 2.readAsBinaryString(file):将文件读取为二进制字符串

  • 3.readAsDataURL(file):将文件读取为Data URL

  • 4.readAsText(file, [encoding]):将文件读取为文本,encoding缺省值为'UTF-8'

updateFile(e) {
 let _this = this;
 let files = e.target.files;
 let fileReader = new FileReader();
 fileReader.onload = function(ev) {
   try {
     let data = ev.target.result;
     let workbook = XLSX.read(data, { type: "binary" }); // 以二进制流方式读取得到整份excel表格对象
     let sheetName = workbook.Sheets[workbook.SheetNames[0]]; // 这里我们只读取第一张表,获取表名(如Sheet1)
     _this.excelData = XLSX.utils.sheet_to_json(sheetName, {
       header: "A",
       raw: true,
       defval: " " // 意思是从头开始匹配,如遇到空格,将跳过执行,并替换为" "字符串。
     });
     console.log(_this.excelData) // excelData在data()中声明的变量, _this.excelData就是我们熟悉的数组数据了。
   } catch (e) {
     return _this.$message.error("文件类型不正确!");
   }
 };
 // fileReader.readAsBinaryString(files[0]); // 将文件读取为二进制字符串展示在页面
}

excel多张表格的处理:

var fromTo = '' // 表格范围,可用于判断表头数量是否正确
// 遍历每张表读取
for (var sheet in workbook.Sheets) {
   if (workbook.Sheets.hasOwnProperty(sheet)) {
       fromTo = workbook.Sheets[sheet]['!ref'] // 表头数量
       _this.excelData = _this.excelData.concat(XLSX.utils.sheet_to_json(workbook.Sheets[sheet]), {
           header: 'A',
           raw: true,
           defval: ' '
       })
   }
}

将得到的数据渲染在echarts中,效果如下:

如何利用JavaScript读取excel文件并绘制echarts图形

4、尾言

  • 本文中主要讲解excel数据获取部分。

  • 对于将获取的数组数据如何处理将会在后面的文章中详细讲解。

来源:https://juejin.cn/post/6844903740936290312

标签:js,excel,echarts
0
投稿

猜你喜欢

  • Matplotlib使用字符串代替变量绘制散点图的方法

    2021-04-18 06:10:11
  • 简单理解vue中track-by属性

    2024-04-30 10:21:05
  • Oracle外键不加索引引起死锁示例

    2024-01-20 20:10:08
  • 教会你完全搞定MySQL数据库 轻松八句话

    2024-01-26 22:34:53
  • vue iview的菜单组件Mune 点击不高亮的解决方案

    2024-06-07 15:20:08
  • MySQL外键创建失败1005原因汇总

    2024-01-20 00:16:58
  • 探讨php中防止SQL注入最好的方法是什么

    2023-09-11 14:20:48
  • 浅析JS原始值和引用值问题

    2024-04-28 09:33:17
  • vue中的插槽详解

    2024-05-03 15:08:50
  • Python实现检测文件MD5值的方法示例

    2023-05-08 11:41:45
  • 基于canvas的二维码邀请函生成插件

    2024-04-17 10:40:53
  • 使用BootStrap和Metroui设计的metro风格微网站或手机app界面

    2024-05-02 17:32:09
  • python实现聊天小程序

    2023-11-07 05:17:51
  • 浅谈python新式类和旧式类区别

    2023-03-16 16:47:37
  • ASP编码问题的深入研究与解决方案(MSDN)

    2007-10-25 11:54:00
  • Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】

    2021-01-28 10:30:49
  • Python pyecharts模块安装与入门教程

    2023-09-11 06:52:41
  • pandas通过字典生成dataframe的方法步骤

    2023-04-19 14:52:37
  • IE6图片加载的一个BUG解决方法

    2023-09-16 03:20:10
  • 设置SQLServer数据库中某些表为只读的多种方法分享

    2024-01-23 06:27:47
  • asp之家 网络编程 m.aspxhome.com