数据管理DMS 作为一款To B的在线数据库管理平台,不仅支持对在线数据库的实时管理,包括SQL查询表、打开表、新建表、编辑表、设计表结构、表结构对比等基础功能,高阶功能如数据血缘、历史版本、数据质量等也刚刚推出;在数据分析处理方面,支持对结果集一键创建可视化图表,通过任务编排进行数据的周期调度管理,生成报表等。对于前端来说,所有的这些功能其实都是围绕着对数据的展示和操作上,而且还是大批量的数据,此时我们需要一款好用、强大且高性能的在线电子表格。
1. 基本诉求
要求满足最基本的表格功能,如排序、筛选、编辑、键盘鼠标事件、批量选中、复制、导出等。性能上,至少能渲染1万条数据量,无明显卡顿情况,对于内容较多的富文本渲染有比较好的处理方案。
2. 高阶功能
高阶功能如多人协同、可视化图表、透视、统计、函数等。
目前市场上电子表格发展得比较成熟和具有代表性的产品是 **Google Spreadsheet、微软 Office 365、苹果Numbers、**国内的 WPS、石墨、飞书、腾讯等大厂也都开始发力。
电子表格的发展历程可见下图:
2006年之前电子表格一直是以客户端软件的形式存在,直到2006年Google推出一款新的产品Google Docs(在线办公文档),将软件版的电子表格搬到了线上,奠定了在线电子表格的基础,也为前端行业的繁荣发展起到了促进作用。
1. SpreadJS(收费)
SpreadJS 是一款葡萄城公司开发的基于 HTML5 的纯前端表格控件,兼容 450 种以上的 Excel 公式,具备“高性能、跨平台、与 Excel 高度兼容”的产品特性,备受华为、明源云、远光软件等知名企业青睐,被中国软件行业协会认定为“中国优秀软件产品”。SpreadJS 在界面和功能上与 Excel 高度类似,但又不局限于 Excel,而是为企业信息化建设提供表格文档协同编辑、数据填报和类Excel报表设计的功能支持,极大降低了企业研发成本和项目交付风险。
在线表格编辑器是 SpreadJS 的扩展插件,可直接在Angular、React、Vue等前端框架中调用,内置开放的 API 和类 Excel 的 UI 设计元素(如工具面板),可实现高效的模板设计、在线编辑和数据绑定,为最终用户带来高度类似 Excel 的使用体验。在线表格编辑器不包含在任何控件或套包内,需要在获得 SpreadJS 的授权后购买使用。
2. EtherCalc(开源)
EtherCalc 是一款采用Livescript为编程语言的支持多人协同编辑的在线开源电子表格,来自于一名台湾开发者,诞生时间比较久,看代码提交记录大约是10年前。目前github关注数2.6K,最近一次代码提交时间是4个月以前,目前应该是处于维护状态。
3. Handsontable(开源)
Handsontable 是一个类似 excel 的纯前端表格编辑器,支持表格的大部分功能。可直接在React、Angular、Vue等框架中使用。目前github的关注数为15.1K,使用人数较为广泛,更新比较频繁。
1. DataWorks
DataWorks 是阿里云一款基于MaxCompute/EMR/MC-Hologres等大数据计算引擎,为客户提供专业高效、安全可靠的一站式大数据开发与治理平台,自带阿里巴巴数据中台与数据治理最佳实践,赋能各行业数字化转型。每天阿里巴巴集团内部有数万名数据/算法工程师正在使用DataWorks,承担集团99%数据业务构建。
根据其产品特点,前端主要的交互集中在对结果数据进行一个二次的分析与统计,需要一个类似excel的在线表格分析控件。他们经过调研与分析,并没有采用自研的方向,而是在SpreadJS的基础上进行了一个二次开发。下面是DataWorks的整体架构图:
2. 钉钉文档
众所周知,钉钉是阿里巴巴一款移动智能办公平台,目前有4亿用户,1700万的组织都在用钉钉,其产品定位不光是即时通讯、聊天,更主打移动办公,可以随时随地写文档、写excel、发邮件等。基于此,钉钉在2020年成立了专门的文档团队,主要负责钉钉的文档部分,其重要性可见一斑。
经过笔者内部了解到,钉钉文档里面的表格部分在2019年之前采用的是spreadJS+二次开发的形式完成的,到了2020年因为成立了专门的文档团队,前端资源也有了富余,于是开始走上了自研之路,经过一年的努力,目前已经完成了表格的基本功能,并在集团内部开始推广。其采用的核心技术点如下:
3. 羽雀
羽雀 是蚂蚁研发的一款在线文档编辑与协同工具,主要用于记录个人学习笔记、团队及项目文档、知识分享讨论等,目前在阿里巴巴内部被大范围使用。羽雀提供的编辑器支持文档、表格、演示文稿、绘图四大文稿类型,具备 Markdown、代码块、LaTeX 公式、PlantUML 等专业编辑能力,同时支持本地视频、Office 文件、PDF 文件等内容的上传与在线预览,可满足多种专业岗位需求,让创作更高效。
最开始其团队采用的同样是spreadJs+二次开发的模式,后来发现功能越来越难做,无法满足其日常需求,维护和开发成本都开始上升。于是,在2019年5月羽雀团队也抛弃了spreadJs,开始自研。以下是羽雀表格的架构图: