一个专为 Excel 公式编写设计的 VS Code 扩展,提供完整的语言支持和现代化开发体验。让复杂的 Excel 公式编写变得高效、可维护。
✨ 功能特性
🎉 完整实现(Phase 1 MVP - 100% 完成)
1. 文件类型支持
.formula
- Excel 公式文件
.xlsxfx
- Excel 扩展公式文件
- 自动语法识别和高亮
2. 智能代码补全
- 🔍 函数名智能补全 - 基于完整元数据库的25+核心函数
- 📝 代码片段模板 - LET、LAMBDA、XLOOKUP、FILTER、IFS、SWITCH 等
- 🎯 上下文感知 - 在合适位置自动触发补全
- 📖 完整文档 - 函数说明、参数类型、使用示例
- 🔗 单元格引用补全 - A1、A1:B10、A:A、1:1 等引用格式
3. 函数签名提示
- ⚡ 实时参数提示 - 当前参数位置高亮显示
- 🔄 嵌套函数支持 - 处理复杂的函数嵌套结构
- 📋 参数文档 - 类型、描述、必需性、默认值
- ✅ 必需/可选标识 - 清晰的参数要求展示
4. 语法诊断
- 🚨 实时错误检测 - 语法错误、括号匹配、运算符验证
- 🎯 函数验证 - 未知函数检测、参数数量检查
- 📍 引用检查 - Excel 限制范围验证(A1:XFD1048576)
- 🔧 智能建议 - 基于 Levenshtein 算法的拼写纠错
- ⚙️ 特定规则 - LET 奇数参数、LAMBDA 最少参数等
5. 代码折叠
- 📂 函数级别折叠 - LET、LAMBDA、IFS、SWITCH 等复杂函数
- 📄 多行公式折叠 - 自动识别和折叠多行表达式
- 🔗 嵌套支持 - 分层折叠复杂的嵌套结构
- 🎚️ 智能条件 - 基于复杂度自适应折叠
6. 悬停提示
- 📚 函数文档 - 完整的函数说明、参数列表、示例代码
- 🔍 引用信息 - 单元格引用类型、范围大小、有效性检查
- 🏷️ 变量追踪 - LET 变量定义位置和作用域
- 💎 富文本支持 - Markdown 格式、代码高亮
7. 语义高亮
- 🎨 函数分类着色 - 标准、现代、易变、定义类函数不同颜色
- 📍 引用类型区分 - 相对、绝对、列、行引用可视化区分
- 🏷️ 变量语义 - LET 变量声明/使用、LAMBDA 参数标识
- ⚠️ 错误标记 - 无效引用、未知函数红色标记
8. 快速修复
- 🔧 自动修复 - 常见语法错误(括号、等号、运算符)
- 📝 函数纠错 - 智能函数名建议和替换
- 🎯 参数修复 - 基于元数据的参数模板补全
- 🔍 引用修复 - 单元格引用格式纠正
- ⚡ 高级重构 - LET 提取、IF→IFS 转换、表达式简化
9. 代码格式化
- 🎨 结构化布局 - LET 函数名值对分行、计算表达式独立
- 📏 智能换行 - 80字符行宽控制、长参数自动换行
- 📐 标准缩进 - 4空格缩进、正确的层次结构
- ✨ 美化规则 - 函数名大写、运算符空格、逗号格式化
📋 支持的函数
🎯 核心函数(完整元数据支持 - 29个函数)
LET
- 变量定义和计算,支持复杂作用域
LAMBDA
- 自定义函数,参数追踪和验证
IF
/ IFS
- 条件判断,智能参数提示
SWITCH
- 多分支选择,支持多个值-结果对
INDEX
- 数组索引查找,经典组合支持
XLOOKUP
- 现代查找函数,错误处理模板
FILTER
- 动态数组过滤,条件验证
PIVOTBY
- 数据透视表(Excel 2024)
GROUPBY
- 分组汇总(Excel 2024)
🆕 新增函数支持(16个)
ISOMITTED
- LAMBDA 参数省略检测
DROP
- 删除数组行/列
XMATCH
- 高级查找位置
CHOOSECOLS
- 选择指定列
TEXTSPLIT
- 文本分割为数组
TAKE
- 提取数组行/列
ISERROR
- 错误值检测
HSTACK
- 水平堆叠数组
VSTACK
- 垂直堆叠数组
COLUMNS
- 获取列数
N
- 转换为数字
AGGREGATE
- 高级聚合计算
TEXT
- 数字格式化为文本
SUM
- 求和计算
ROWS
- 获取行数
UNIQUE
- 获取唯一值
🆕 最新新增函数(3个)- 2025年1月2日
ISTEXT
- 检测值是否为文本
BYROW
- 对每行应用LAMBDA函数
AVERAGE
- 计算算术平均值
🔍 语法元素
- 单元格引用 - A1、$A$1、A1:B10、A:A、1:1
- 数组常量 - {1,2,3}、{"a","b","c"}
- 动态数组 - @、# 溢出符号
- 运算符 - 算术、比较、文本连接
- 字符串和数值 - 完整的字面量支持
使用方法
1. 安装扩展
目前处于开发阶段,需要手动安装:
# 克隆项目
git clone https://github.com/fengems/excel-Formula.git
cd excel-Formula
# 安装依赖并编译
yarn install
yarn compile
# 在 VS Code 中按 F5 启动调试
2. 创建公式文件
创建 .formula
或 .xlsxfx
文件,例如:
// test.formula
=LET(
name, "John",
age, 25,
IF(age > 18,
"Adult: " & name,
"Minor: " & name
)
)
3. 使用格式化
- 通过命令面板:
Excel Formula: Format Formula
- 或使用快捷键格式化当前文档
💡 使用示例
LET 函数 - 变量定义和复杂计算
=LET(
sales_data, A1:A100,
target, 1000,
actual_sales, SUM(sales_data),
performance_ratio, actual_sales / target,
status, IF(performance_ratio >= 1, "目标达成", "需要努力"),
"销售额: " & actual_sales &
", 完成率: " & ROUND(performance_ratio * 100, 1) & "%" &
", 状态: " & status
)
LAMBDA 自定义函数 - 可重用逻辑
=LAMBDA(data_range, condition_value,
LET(
filtered_data, FILTER(data_range, data_range > condition_value),
summary_stats, {
"总数: " & COUNTA(filtered_data),
"平均值: " & ROUND(AVERAGE(filtered_data), 2),
"最大值: " & MAX(filtered_data)
},
summary_stats
)
)
XLOOKUP + FILTER 组合 - 现代查找和筛选
=LET(
lookup_result, XLOOKUP(B2, employees[ID], employees[Department], "未找到"),
department_data, FILTER(
sales_data,
sales_data[Department] = lookup_result
),
summary, IF(ISERROR(department_data),
"部门 " & lookup_result & " 无销售数据",
"部门 " & lookup_result & " 总销售额: " & SUM(department_data[Amount])
),
summary
)
复杂 IFS 条件判断
=LET(
score, B2,
grade, IFS(
score >= 90, "A",
score >= 80, "B",
score >= 70, "C",
score >= 60, "D",
TRUE, "F"
),
comment, SWITCH(grade,
"A", "优秀!",
"B", "良好",
"C", "中等",
"D", "及格",
"F", "需要改进"
),
grade & " - " & comment
)
🎯 核心功能演示
智能代码补全
- 输入
=L
→ 自动提示 LET
函数
- 选择后自动生成结构化模板
- Tab 键在参数间快速导航
实时错误检查
- 括号不匹配 → 红色波浪线标记
- 未知函数名 → 提供拼写建议
- 参数数量错误 → 显示正确的参数要求
悬停查看文档
- 悬停函数名 → 显示完整文档和示例
- 悬停单元格引用 → 显示引用信息和有效性
- 悬停 LET 变量 → 显示定义位置和值
一键格式化
- 命令面板:
Excel Formula: Format Formula
- 自动格式化为结构化、易读的布局
- 支持 LET 函数专用格式化
🔧 配置说明
支持的文件扩展名
.formula
- 标准 Excel 公式文件
.xlsxfx
- Excel 扩展公式文件
格式化设置
- 行宽限制: 80 字符
- 缩进方式: 4 个空格
- 函数名: 自动转换为大写
- 运算符: 前后添加空格
- 逗号: 后面添加空格,长参数列表自动换行
📊 项目状态
🎉 Phase 1 MVP - 100% 完成!
所有核心语言服务功能已完全实现,提供专业级的 Excel 公式开发体验。
下一阶段规划
- 📖 文档完善和发布准备 - 当前优先级
- ⚡ 性能优化 - 大文件支持、响应速度提升
- 🚀 高级功能 - 变量重命名、跳转定义、重构支持
详细进度请查看 PROGRESS.md
🏗️ 技术架构
已实现架构
- 语言支持: 完整的 VS Code Language Provider 架构
- 元数据系统: JSON 格式的函数定义库
- 智能解析: 自定义 Excel 公式解析算法
- 零依赖: Yarn PnP 模式,无需 node_modules
- TypeScript: 严格模式,类型安全
技术栈
- TypeScript 4.9.4 + VS Code API 1.74.0
- TextMate Grammar - 语法高亮
- Language Providers - 补全、诊断、悬停等
- 自定义解析器 - Excel 公式特定的语法分析
🧪 测试和验证
功能测试文件
test-completion.formula # 代码补全功能测试
test-signature-help.formula # 函数签名提示测试
test-diagnostics.formula # 语法诊断测试
test-folding.formula # 代码折叠测试
test-hover.formula # 悬停提示测试
test-semantic.formula # 语义高亮测试
DEMO.formula # 综合功能演示
运行测试
# 启动开发环境
yarn compile
# 在 VS Code 中按 F5,打开测试文件验证功能
🤝 贡献指南
开发环境设置
- Fork 本仓库
- 安装 Yarn 2.0+
- 运行
yarn install
- 在 VS Code 中按 F5 开始调试
贡献类型
- 🐛 Bug 修复 - 功能问题、性能问题
- ✨ 新功能 - 函数支持、语言特性
- 📖 文档改进 - 使用指南、API 文档
- 🧪 测试用例 - 边界情况、新功能测试
📝 许可证
MIT License - 详见 LICENSE 文件
🙏 致谢
- Microsoft Excel 团队 - 优秀的公式系统设计
- VS Code 团队 - 强大的扩展 API
- TypeScript 团队 - 类型安全的开发体验
📞 联系我们
- GitHub Issues - 问题反馈和功能请求
- Discussion - 使用交流和开发讨论
让 Excel 公式编写变得高效、优雅! ✨