!!!###!!!title=公式计算——VisActor/VTable 教程文档!!!###!!!

VTable2 公式功能

1. 功能概述

VTable2 内置了强大的公式计算引擎,支持类似 Excel 的公式功能,可以让用户直接在表格中进行数据计算和分析。主要特点包括:

  • 支持丰富的内置函数,如 SUM、AVERAGE、IF 等超过 40 种常用函数
  • 提供智能的公式编辑器,带有自动完成和语法高亮功能
  • 支持单元格引用和范围选择
  • 可进行多表格引用和计算
  • 支持公式依赖追踪和自动重新计算
  • 检测并避免循环引用问题

2. 支持的公式函数

VTable2 支持的函数包括但不限于:

数学函数

  • SUM: 计算总和,例如 =SUM(A1:A10)
  • AVERAGE: 计算平均值,例如 =AVERAGE(B2:B8)
  • MAX/MIN: 获取最大/最小值,例如 =MAX(C1:C20)
  • ROUND: 四舍五入,例如 =ROUND(A1, 2)
  • ABS: 绝对值,例如 =ABS(A1)

逻辑函数

  • IF: 条件判断,例如 =IF(A1>10, "高", "低")
  • AND/OR: 逻辑与/或,例如 =AND(A1>5, A1<10)
  • NOT: 逻辑非,例如 =NOT(A1=0)

文本函数

  • CONCATENATE: 文本连接,例如 =CONCATENATE(A1, " ", B1)
  • LEFT/RIGHT: 提取左侧/右侧字符,例如 =LEFT(A1, 3)
  • LEN: 计算文本长度,例如 =LEN(A1)

日期函数

  • TODAY: 获取今天日期,例如 =TODAY()
  • NOW: 获取当前日期和时间,例如 =NOW()
  • YEAR/MONTH/DAY: 提取年/月/日,例如 =YEAR(A1)

查找函数

  • VLOOKUP: 垂直查找,例如 =VLOOKUP(A1, B1:C10, 2, FALSE)
  • INDEX/MATCH: 索引匹配,例如 =INDEX(A1:C10, MATCH(D1, A1:A10, 0), 2)

3. 公式编辑器

VTable2 提供了一个功能齐全的公式编辑器,帮助用户高效地输入和编辑公式:

  • 智能提示: 输入"="后自动提示可用函数
  • 自动完成: 键入函数名称的前几个字母,显示匹配的函数列表
  • 参数提示: 输入函数时显示参数说明和用法
  • 错误检查: 检测括号匹配、语法错误等
  • 范围选择: 在输入公式时可直接点击选择单元格或拖动选择范围
  • 选取范围高亮: 对公式选取范围进行颜色区分

4. 实现原理

VTable2 的公式系统主要基于以下组件实现:

核心计算引擎

VTableSheet 自身开发了 FormulaEngine 模块 作为核心的计算引擎:

  • 支持大多数常见的 Excel 函数
  • 构建依赖图以跟踪单元格之间的引用关系
  • 高效的增量计算,只重新计算受影响的单元格

公式管理架构

公式系统主要由以下几个部分组成:

  • FormulaManager: 核心管理类,负责与 FormulaEngine 交互,处理公式计算和单元格状态管理
  • FormulaEditor: 处理公式输入和编辑界面
  • FormulaAutocomplete: 提供智能的函数和单元格引用提示
  • FormulaRangeSelector: 处理单元格和区域选择逻辑
  • CellHighlightManager: 管理公式相关单元格的高亮显示

公式解析与计算流程

  • 用户输入公式,以"="开头
  • 公式编辑器解析输入内容,提供函数提示和参数提示
  • 公式提交后,FormulaManager 将其传递给 FormulaEngine
  • FormulaEngine 解析公式,构建依赖图,执行计算
  • 结果返回并显示在单元格中
  • 当依赖的单元格更新时,系统自动重新计算受影响的公式(TODO)

5. 使用示例

基本公式输入

  • 点击单元格并输入"="符号开始公式
  • 输入函数名称或直接引用单元格
  • 按 Enter 键确认输入

示例:

=SUM(A1:A10)     // 计算A1到A10的总和
=A1+B1*C1        // 基本运算
=IF(D1>100, "大", "小")  // 条件判断

手动输入公式:

单元格引用与范围选择

  • 在输入公式时,点击其他单元格可自动插入其引用
  • 拖动可选择一个区域范围
  • 支持绝对引用($A$1)和相对引用(A1)

输入单元格引用和范围选择:

公式复制

当复制包含公式的单元格时,引用会自动调整:

  • 相对引用会根据位置偏移调整
  • 绝对引用保持不变

填充柄自动填充

当选中区域存在公式的时候,利用填充柄拖拽自动填充单元格的公式。

## 6. 高级功能

多工作表支持(TODO)

支持在公式中引用其他工作表的单元格:

=Sheet2!A1       // 引用Sheet2的A1单元格
=SUM(Sheet3!B2:B10)  // 计算另一个工作表的区域总和

公式依赖追踪(TODO)

系统能够追踪公式之间的依赖关系:

  • 自动更新:当依赖的单元格改变时,相关公式自动重新计算
  • 循环引用检测:自动检测并警告循环引用问题

错误处理

支持常见的公式错误处理:

  • #DIV/0!: 除以零错误
  • #VALUE!: 值类型错误
  • #REF!: 引用错误
  • #NAME?: 名称错误
  • #NUM!: 数值错误

7. 注意事项

  • 公式必须以"="符号开头
  • 函数名称不区分大小写
  • 支持嵌套函数,如 =IF(SUM(A1:A5)>100, MAX(B1:B5), MIN(C1:C5))
  • 单元格地址使用A1格式,如A1, B2, C3等
  • 区域引用使用冒号分隔,如A1:B10

目前公式能力并不完善 如公式的联动处理,公式和排序以及拖拽行列换位都有冲突 手动配置了其他单元格编辑器editor后,公式能力会失效 后续会逐步完善这些功能,也欢迎有兴趣的开发者参与贡献