
XLParser
开源 C# Excel 公式解析器
使用紧凑的解析树,通过开源 C# 库高精度解析、分析和遍历 Excel 公式。
XLParser 是什么?
XLParser 是一个高精度的 C# 库,用于解析 Microsoft Excel 公式,基于 Irony 解析框架构建。它在超过一百万个真实公式上实现了 99.9% 的成功率,专为电子表格分析和重构而设计。其紧凑的语法——少于 100 个标记和产生式规则——使其易于理解、维护或移植到其他语言。XLParser 作为论文““A Grammar for Spreadsheet Formulas Evaluated on Two Large Datasets””中发布的 Excel 语法的参考实现,并支持 Enron 和 EUSES 基准数据集。
XLParser 生成紧凑的解析树,能够高效地遍历、分析和转换公式。开发者可以使用 `ExcelFormulaParser` 类来解析公式并提取函数名称、引用和子表达式。`FormulaAnalyzer` 类进一步支持高级操作,如 `ParserReferences()` 来检索所有单元格、范围和命名引用。XLParser 专注于研究和工具,适用于电子表格质量保证、公式重构和教育工具。您可以尝试在线演示,通过 NuGet 安装,或在 [XLParser GitHub](https://github.com/spreadsheetlab/XLParser) 上从源码构建。
XLParser 入门指南
XLParser 可通过 NuGet 获取,并可使用包管理器控制台或 Visual Studio 的 NuGet UI 安装。最简单的方法是在包管理器控制台中运行 `Install-Package XLParser`。或者,您可以从 [XLParser GitHub](https://github.com/spreadsheetlab/XLParser) 下载最新发布版本,构建解决方案,并直接引用 DLL。该库基于 Irony 解析器框架构建,无需额外依赖。安装后,您可以使用 `ExcelFormulaParser` 类开始解析 Excel 公式。其 `Parse()` 方法接受公式字符串并返回用于进一步分析或转换的解析树。
通过 NuGet 安装 XLParser
Install-Package XLParser高兼容性 Excel 公式解析
XLParser 在超过一百万个真实世界的 Excel 公式上实现了 99.9% 的成功解析率,使其成为最可靠的 C# 公式解析器之一。它已在广泛使用的 Enron 和 EUSES 基准数据集上进行验证,并旨在处理复杂、嵌套以及真实世界的公式——包括数组表达式、引用和函数。虽然 XLParser 并不过于严格(它可能会解析一些 Excel 会拒绝的公式),但这种宽容是为研究和分析用例而有意设计的。开发者可以信赖 XLParser 解析生产电子表格中遇到的绝大多数公式,从而实现强大的公式分析、重构和质量保证工作流。其紧凑的语法确保了在解析器框架之间的可维护性和可移植性。
解析 Excel 公式并检查解析树
using XLParser;
var parser = new ExcelFormulaParser();
var tree = parser.Parse("SUM(A1:B10, C12)");
Console.WriteLine(tree.Print());从 Excel 公式中提取所有引用
XLParser 包含 `FormulaAnalyzer` 类,提供强大的方法用于分析已解析的公式。其关键特性之一是 `ParserReferences()`,它返回公式中使用的所有单元格、范围、命名范围以及水平/垂直引用。这对于依赖跟踪、影响分析和重构工具极为宝贵。例如,给定公式 `SUM(A1:B10, C12, NamedRange)`,`ParserReferences()` 将返回 `A1:B10`、`C12` 和 `NamedRange` 的列表。这使开发者能够构建电子表格审计工具、可视化数据流或检测循环依赖。该方法与紧凑的解析树结构无缝配合,确保即使在大型公式中也能快速且准确地提取。
使用 FormulaAnalyzer 提取所有引用
using XLParser;
var parser = new ExcelFormulaParser();
var tree = parser.Parse("SUM(A1:B10, C12, NamedRange)");
var analyzer = new FormulaAnalyzer(tree);
var references = analyzer.ParserReferences();
foreach (var refNode in references)
{
Console.WriteLine(refNode.Print());
}遍历并分析解析树
XLParser 的解析树旨在实现高效的遍历和分析。`ExcelFormulaParser` 类提供了诸如 `AllNodes` 等方法,可遍历树中的每个节点,从而实现自定义分析、转换或验证逻辑。开发者可以按类型(例如函数、引用、运算符)过滤节点,并执行诸如计数函数出现次数、检测未使用的命名范围或识别潜在错误等操作。`GetFunction()` 方法简化了从函数调用节点中提取函数名,而 `Print()` 则允许快速调试或记录任何节点的结构。这些能力使 XLParser 成为构建电子表格质量工具、重构助手和教育可视化的理想选择。
遍历所有节点并提取函数名称
using XLParser;
var parser = new ExcelFormulaParser();
var tree = parser.Parse("SUM(A1, A2) + AVERAGE(B1:B5)");
var functions = tree.AllNodes.Where(n => n.IsFunction());
foreach (var func in functions)
{
Console.WriteLine($"Function: {func.GetFunction()}");
}调试并可视化解析树
XLParser 与 Irony 的 GrammarExplorer 工具紧密集成,提供交互式调试和树形可视化。构建 XLParser 和 GrammarExplorer 解决方案后,您可以将 `XLParser.dll` 作为语法加载,并实时测试公式。在开发过程中,Visual Studio 的调试器支持通过监视窗口使用 `yournode.Print(),ac` 检查解析树节点。此功能加速了对复杂公式的理解、边界情况的测试以及语法规则的验证。紧凑的树结构确保即使是深度嵌套的公式也保持可读且易于管理。无论您是构建电子表格分析工具还是研究 Excel 公式行为,XLParser 的调试支持都简化了开发和故障排除。
在 Visual Studio 监视窗口调试解析树节点
var tree = parser.Parse("IF(A1>0, A1*2, 0)");
// In Watch window: tree.Print(),ac