This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
VTable is a high-performance multidimensional data analysis table component built on the VRender canvas engine. This is a Rush monorepo containing the core VTable library and related packages.
# Install dependencies (required first time and after package.json changes)
rush update
# Build all packages
rush build
# Start development server for core vtable package
cd packages/vtable && rushx demo
# Start documentation site
rush docs
# Run tests
rush test
# Run linting
rush eslint
# Fix dependency issues
rush purge && rush update# Build specific package
cd packages/[package-name] && rushx build
# Run tests for specific package
cd packages/[package-name] && rushx test
# Start demo for specific package
cd packages/[package-name] && rushx demo# After making changes, update changelogs before committing
rush change-all
# Commit with conventional message format
git commit -m "type: description"- packages/vtable: Core VTable library with ListTable, PivotTable, and PivotChart components
- packages/vtable-gantt: Gantt chart component
- packages/vtable-editors: Table editor components
- packages/vtable-plugins: Plugin system for extending functionality
- packages/vtable-export: Export functionality (Excel, CSV, etc.)
- packages/vtable-search: Search capabilities
- packages/vtable-calendar: Calendar component
- packages/vtable-sheet: Spreadsheet functionality (current development branch)
- 项目特性: 电子表格组件,支持多sheet tab页签管理
- 核心架构:
workSheetInstances: 管理所有sheet tab实例的核心容器work-sheet: 单个sheet页签的实现,包含对应vtable实例
- 依赖关系: 依赖vtable核心插件系统,需先安装vtable插件
- 当前开发重点: 跨sheet tab公式计算支持
- 技术实现: 基于VTable核心库扩展,每个sheet对应独立的VTable实例
- packages/react-vtable: React wrapper
- packages/vue-vtable: Vue wrapper
- packages/openinula-vtable: OpenInula wrapper
The library is built on a canvas-based rendering system using VRender:
-
Table Types:
ListTable: Basic table with columns and rowsPivotTable: Multi-dimensional data analysisPivotChart: Chart integration with tables
-
Rendering Pipeline:
- Scenegraph-based rendering in
src/scenegraph/ - Canvas-based graphics using VRender engine
- Custom layout system in
src/render/layout/
- Scenegraph-based rendering in
-
Data Management:
- Data source abstraction in
src/data/ - Statistics and aggregation in
src/dataset/ - Event system for data updates
- Data source abstraction in
-
Extension Points:
- Plugin system for custom functionality
- Theme system for styling
- Custom cell renderers and editors
- Framework: Jest with ts-jest preset
- Environment: jest-electron for DOM/canvas testing
- Coverage Requirements: 60% minimum for all metrics
- Test Location:
__tests__/directories within each package
- @visactor/vrender-*: Canvas rendering engine (v1.0.14)
- @visactor/vutils: Utility functions (~0.19.1)
- lodash: Utility library (4.17.21)
- This is a Rush monorepo - always use
rushcommands instead of npm/yarn directly - Current branch:
feat/vtable-sheet(spreadsheet functionality) - Main branches:
main,develop - Node.js versions supported: 14.15.0+, 16.13.0+, 18.15.0+
/Users/bytedance/VisActor/VTable/packages/vtable-sheet
- 跨sheet tab公式计算支持: 实现不同sheet页签间的公式引用和计算
- 多页签管理: 支持创建、切换、删除sheet页签
- 数据同步: 确保跨sheet数据引用的实时更新
- 核心入口: vtable-sheet文件是整个组件的入口点
- 实例管理: workSheetInstances负责管理所有sheet实例
- 单sheet实现: 每个work-sheet包含独立的VTable实例
- 插件依赖: 依赖VTable核心插件系统提供基础功能
-
CrossSheetFormulaManager (
src/formula/cross-sheet-formula-manager.ts)- 管理跨Sheet公式引用关系
- 处理依赖关系映射和缓存
- 支持公式验证和错误处理
-
CrossSheetDataSynchronizer (
src/formula/cross-sheet-data-synchronizer.ts)- 处理跨Sheet数据同步
- 支持批量数据更新
- 提供实时更新通知机制
-
CrossSheetFormulaValidator (
src/formula/cross-sheet-formula-validator.ts)- 验证跨Sheet公式语法
- 检测循环依赖
- 提供详细的错误信息
-
CrossSheetFormulaHandler (
src/formula/cross-sheet-formula-handler.ts)- 统一的跨Sheet公式处理接口
- 集成缓存、验证、同步功能
- 提供高性能的计算引擎
- 基本引用:
=Sheet1!A1,=Sheet2!B2:C4 - 函数计算:
=SUM(Sheet1!A1:A10),=AVERAGE(Sheet1!B1:B10) - 跨表运算:
=Sheet1!A1 + Sheet2!B1 - 条件判断:
=IF(Sheet1!A1>100, "达标", "未达标") - 复杂嵌套:
=IF(AVERAGE(Sheet1!A1:A10)>50, SUM(Sheet1!B1:B10)*1.1, SUM(Sheet1!B1:B10))
- ✅ 实时计算: 源数据变化时自动更新依赖公式
- ✅ 智能缓存: 1秒TTL缓存机制,平衡性能与实时性
- ✅ 错误处理: 完善的错误检测和提示机制
- ✅ 依赖管理: 自动识别和管理跨Sheet依赖关系
- ✅ 批量处理: 支持批量公式计算和数据更新
- ✅ 性能优化: 异步处理,避免阻塞UI
// 设置跨Sheet公式
const cell = { sheet: 'Summary', row: 1, col: 1 };
const formula = '=SUM(SalesData!B2:E4)';
await formulaManager.setCrossSheetFormula(cell, formula);
// 获取计算结果
const result = await formulaManager.getCrossSheetValue(cell);
console.log(result.value); // 计算结果
console.log(result.calculationTime); // 计算耗时
// 验证公式
const validation = formulaManager.validateCrossSheetFormula(cell);
console.log(validation.valid); // 是否有效
// 获取依赖关系
const dependencies = formulaManager.getCrossSheetDependencies();- 单元测试:
__tests__/cross-sheet-formula-simple.test.ts - 集成测试:
__tests__/integration/cross-sheet-integration.test.ts - 演示页面:
examples/cross-sheet-demo.html - 使用文档:
docs/cross-sheet-formula-guide.md
- 100个跨Sheet公式计算 < 5秒
- 20个公式批量重新计算 < 2秒
- 缓存命中率 > 80%
- 内存使用优化,支持大规模数据
- 跨Sheet公式目前主要用于读取操作,写入操作仍在原Sheet中进行
- 复杂的跨Sheet引用可能需要异步处理以获得最佳性能
- 循环依赖检测基于静态分析,运行时循环依赖需要额外的错误处理