univer
Univer 是由 DreamNum 公司开发的开源办公套件引擎,核心聚焦于电子表格(Spreadsheets)的创建与编辑,同时还在积极开发文档(Doc)、演示文稿(Slide)等能力,旨在为开发者提供可扩展、可嵌入、高性能的办公套件解决方案。
有基础包和其他扩展包,支持不同类型的功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 使用 npm
npm install @univerjs/core
# 文档相关
pnpm add @univerjs/docs @univerjs/docs-ui @univerjs/docs-hyper-link
# 绘图能力
pnpm add @univerjs/drawing @univerjs/drawing-ui
# 脚本能力(实验阶段,不建议生产环境使用)
pnpm add @univerjs/uniscript
# 网络请求
pnpm add @univerjs/network
# RPC 能力
pnpm add @univerjs/rpc
|
电子表格案例
1
2
3
4
5
6
7
8
|
# 1. 创建并进入项目目录
mkdir univer-basic-demo && cd univer-basic-demo
# 2. 初始化 package.json
npm init -y
# 3. 安装核心依赖(以 pnpm 为例,npm/yarn 同理)
pnpm add @univerjs/core @univerjs/sheets @univerjs/sheets-ui @univerjs/ui @univerjs/engine-render
|
前端代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Univer 基础案例</title>
<!-- 引入 Univer 样式(核心 + 表格 UI) -->
<link rel="stylesheet" href="node_modules/@univerjs/core/lib/index.css">
<link rel="stylesheet" href="node_modules/@univerjs/ui/lib/index.css">
<link rel="stylesheet" href="node_modules/@univerjs/sheets-ui/lib/index.css">
<style>
/* 容器样式 */
#univer-container {
width: 100vw;
height: 100vh;
border: 1px solid #eee;
}
</style>
</head>
<body>
<div id="univer-container"></div>
<!-- 引入编译后的 JS(ESModule 方式) -->
<script type="module" src="./index.js"></script>
</body>
</html>
|
逻辑
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
import { FUniver } from '@univerjs/core/facade';
import { createUniverSheets } from '@univerjs/sheets';
import { UniverSheetsUIPlugin } from '@univerjs/sheets-ui';
import { UniverUIPlugin } from '@univerjs/ui';
import { UniverRenderEnginePlugin } from '@univerjs/engine-render';
// 1. 初始化 Univer 实例
const univer = FUniver.newInstance();
// 2. 注册核心插件(渲染引擎 + UI + 表格)
univer.registerPlugin(UniverRenderEnginePlugin);
univer.registerPlugin(UniverUIPlugin);
univer.registerPlugin(UniverSheetsUIPlugin);
univer.registerPlugin(createUniverSheets());
// 3. 创建工作簿(参数为空则创建默认空白表格)
const workbook = univer.createWorkbook({});
// 获取激活的工作表
const worksheet = workbook.getActiveSheet();
// 4. 基础操作:单元格赋值 + 公式计算
async function initSheetData() {
// 4.1 给 A1 单元格赋值(数字)
const a1 = worksheet.getRange('A1');
await a1.setValue({ v: 100 });
// 4.2 给 B1 单元格赋值(文本)
const b1 = worksheet.getRange('B1');
await b1.setValue({ v: '基础案例' });
// 4.3 给 C1 单元格设置公式(SUM(A1 * 2))
const c1 = worksheet.getRange('C1');
await c1.setValue({ f: '=SUM(A1 * 2)' });
// 4.4 隐藏第 2 行(演示行列隐藏功能)
worksheet.hideRows([{ startRow: 1, endRow: 1 }]);
// 4.5 打印 C1 单元格的计算结果(控制台)
console.log('C1 公式计算结果:', c1.getCellData()?.v); // 输出:200
}
// 5. 将表格挂载到 DOM 容器
univer.renderTo(document.getElementById('univer-container'));
// 6. 执行初始化数据逻辑
initSheetData().catch(err => console.error('初始化失败:', err));
|