语雀弃用SpreadJs?在线表格Handsontable如何?

家好,很高兴又见面了,我是"高级前端?进阶?",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!

前言

开始介绍Handsontable之前,先说一个在线表格编辑的研发案例。

一开始在做在线表格时,语雀团队采用的是“SpreadJs+二次开发”的模式,后来发现功能越来越难做,维护和开发成本上升。于是,2019年5月语雀团队弃用了SpreadJs,开始自研。所以,本文也不再聚焦SpreadJs(如果有兴趣可以阅读文末资料),而是向大家介绍另一个在线表格控件Handsontable。话不多说,直接开始。

1.Handsontable是什么?

Handsontable 是一个 JavaScript 组件,它将数据网格功能与类似电子表格的用户体验相结合。提供数据绑定、数据验证、过滤、排序和 CRUD 操作,可以在React、Angular、Vue等前端技术栈中使用。

数以千计的商业应用程序依靠 Handsontable 来输入、编辑、验证、清理来自远程源(例如数据库和 API)或来自 HTML 文档、Excel 文件、Google 表格和手动输入的数据。

从NPM的使用数据来看,最近周下载量也达到了124k左右,而且基本维持稳定。

2.Handsontable突出能力

2.1 提供所有电子表格功能

使用 Handsontable 就像使用 Excel 或 Google 表格一样,没有陡峭的学习曲线,从第一天开始就可以高效工作。

2.2 对开发人员友好的 API

Handsontable 易于实施、灵活且超级可定制。 可以使用自定义插件扩展它并编辑源代码以将其设计为自有产品。 此外,还提供全面的 API、有用的教程以及社区和商业支持。

2.3 性能保证

可以处理大量数据,而不必担心性能问题。各行各业的大公司和初创公司都使用 Handsontable 来构建应用程序。

3.Handsontable基础功能

  • 多列排序
  • 非连续选择
  • 数据过滤
  • 导出到文件
  • 数据验证
  • 条件格式
  • 合并单元格
  • 冻结行/列
  • 移动行/列
  • 调整行/列
  • 隐藏行/列
  • 上下文菜单
  • 评论等

5.与React/Vue/Angular框架集成

5.1 React集成

创建一个容器

然后直接在项目代码中使用:

import Handsontable from 'handsontable';
import 'handsontable/dist/handsontable.full.min.css';
const container = document.querySelector('#example');
// 获取容器
const hot = new Handsontable(container, {
    data: [['', 'Tesla', 'Volvo', 'Toyota', 'Ford'], ['2019', 10, 11, 12, 13], ['2020', 20, 11, 14, 13], ['2021', 30, 15, 12, 13]],
    rowHeaders: true,
    colHeaders: true,
    licenseKey: 'non-commercial-and-evaluation' 
  // 仅供非商业用途
});

5.2 Vue集成



5.3 Angular集成

/* file: app.component.ts */
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  template: `
    
`, }) export class AppComponent { dataset: any[] = [ {id: 1, name: 'Ted Right', address: 'Wall Street'}, {id: 2, name: 'Frank Honest', address: 'Pennsylvania Avenue'}, {id: 3, name: 'Joan Well', address: 'Broadway'}, {id: 4, name: 'Gail Polite', address: 'Bourbon Street'}, {id: 5, name: 'Michael Fair', address: 'Lombard Street'}, {id: 6, name: 'Mia Fair', address: 'Rodeo Drive'}, {id: 7, name: 'Cora Fair', address: 'Sunset Boulevard'}, {id: 8, name: 'Jack Right', address: 'Michigan Avenue'}, ]; } import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { HotTableModule } from '@handsontable/angular'; import { registerAllModules } from 'handsontable/registry'; import { AppComponent } from './app.component'; // register Handsontable's modules registerAllModules(); @NgModule({ imports: [ BrowserModule, HotTableModule ], declarations: [ AppComponent ], bootstrap: [ AppComponent ] }) export class AppModule { }

6.本文总结

本文主要和大家介绍一个优秀的在线表格控件Handsontable。因为笔者也没有在生产项目中使用、部署过Handsontable,所以只是做了一个简短的介绍,但是文末的参考资料提供了大量优秀文档以供学习,如果有兴趣可以自行阅读。如果大家有什么好的在线表格解决方案,还原在评论区留言。


参考资料

https://github.com/handsontable/handsontable

https://handsontable.com/

https://juejin.cn/post/6980236406597779463

https://www.grapecity.com.cn/developer/spreadjs