[纯前端]在线excel开发1:echarts图表联动

开发背景

Excel作为微软Office的得意之作,受到广泛关注。而在实际业务过程中,我们会发现有非常多场景需要web端在线的二维表数据查看+简单图表绘制场景。因此笔者将尝试基于前端技术搭建简化版本的excel在线版本。之所以说简化:我们将功能限定在:

  1. 图表类型部分只支持:折线图,散点图,柱状图
  2. 图表跟table sheet的交互限定在排序+数据筛选高亮

初步的效果如下图展示:

市面上有非常多优秀的实践,如飞书的多维表格 ,office 在线版本,google docs在线文档,还包括各类主流笔记的插入表格等等。我们将基于开源框架实现最简单的版本,抛砖引玉,探索各类有意思的技术细节。

开源工具

在工具的筛选中,我们基于主流的图表库(echarts)和二维表单库(ant S2),后者支持明细表和透视表。

名词解释:明细表就是大家常见的table组件,只有顶部含有列属性;而对应的透视表(pivot table)或者叫交叉表,则是有左侧,顶部 两个维度属性的多维度表格,这里截取s2中的说明来直观查看其中的特点(每个维度方向中的列或行都可以聚合):

echarts中如何协同高亮

上述的三种图表中,散点图相对比较特殊,其他两种都可以通过属性配置itemStyle来高亮

js 复制代码
// series中的data:
[
    100,
    200,
    {
        value: 300,
        itemStyle: {
            color: 'rgba(255,0,0,0.8)',
        }
    }
]

来设置,但scatter散点图缺不支持,如果设置会导致解析失败,图表点无法显示。而在echarts 3.x后提供了dispatchAction来触发高亮 api地址:echarts.apache.org/zh/api.html...

因此我们可以统一基于此来选择对应数据的高亮情况。

s2中单元格如何获取高亮所需的dataIndex

首先我们监听S2的DATA_CELL_BRUSH_SELECTION事件来批量获取选择数据,但由于返回的DataCell数据结构已经包含了对应的二维数据,我们可以很方便的聚合对应的数据

如果是单列的维度,那我们就可以聚合对应的rowIndex.

s2的监听器就够了么

我们在测试中很明显发现,点击空白,高亮默认没有清空,因此我们还需要继续监听对应的onReset事件来清理对应的高亮逻辑

如果我想要支持单击的时候有高亮呢

s2 react 的SheetCompontn 可以单独监听onDataCellClick事件,用于在datacell click单击事件中获取event,这里注意其返回的数据结构与DataCell有差异。

未完待续,下一章,我们将来探讨动态图表的创建

相关推荐
NEXT0618 分钟前
TCP 与 UDP 核心差异及面试高分指南
前端·网络协议·面试
qq_242188633219 分钟前
HTML 全屏烟花网页
前端·html
曲幽27 分钟前
FastAPI实战:WebSocket长连接保持与心跳机制,从入门到填坑
javascript·python·websocket·keep-alive·fastapi·heartbeat·connection
码云数智-大飞29 分钟前
前端性能优化全链路实战:从加载速度到渲染效率的极致提速方案
前端·性能优化
锅包一切36 分钟前
【蓝桥杯JavaScript基础入门】一、JavaScript基础
开发语言·前端·javascript·蓝桥杯
NEXT0637 分钟前
HTTP 协议演进史:从 1.0 到 2.0
前端·网络协议·面试
好学且牛逼的马2 小时前
从“混沌初开”到“有序统一”:Java集合框架发展历程与核心知识点详解
前端·数据库·python
嵌入式×边缘AI:打怪升级日志2 小时前
编写Bootloader实现下载功能
java·前端·网络
恋猫de小郭2 小时前
Flutter 设计包解耦新进展,material_ui 和 cupertino_ui 发布预告
android·前端·flutter
linux_cfan3 小时前
[2026深度评测] 打造“抖音级”丝滑体验:Web直播播放器选型与低延迟实践
前端·javascript·html5