
XLParser
オープンソース C# Excel 数式パーサー
オープンソース C# ライブラリを使用し、コンパクトなパースツリーで高精度に Excel の数式を解析、分析、トラバースします。
XLParserとは何ですか?
XLParser は、Irony パーサーフレームワーク上に構築された、Microsoft Excel の数式を解析するための高精度 C# ライブラリです。実際の数式 100 万件以上で 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 で入手でき、Package Manager Console または Visual Studio の NuGet UI を使用してインストールできます。最も簡単な方法は、Package Manager Console で `Install-Package XLParser` を実行することです。あるいは、[XLParser GitHub](https://github.com/spreadsheetlab/XLParser) から最新リリースをダウンロードし、ソリューションをビルドして DLL を直接参照することもできます。このライブラリは Irony パーサーフレームワーク上に構築されており、追加の依存関係は必要ありません。インストールが完了したら、`ExcelFormulaParser` クラスを使用して Excel の数式の解析を開始できます。その `Parse()` メソッドは数式文字列を受け取り、さらなる分析や変換のための構文木を返します。
NuGetでXLParserをインストール
Install-Package XLParser高い互換性のExcel数式パース
XLParser は、100万件以上の実際の 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