
XLParser
Open Source C# parser Excelových vzorců
Parsujte, analyzujte a procházejte Excelové vzorce s vysokou přesností pomocí kompaktních stromů parsování prostřednictvím open source knihovny v C#.
Co je XLParser?
XLParser je vysoce přesná knihovna C# pro parsování vzorců Microsoft Excel, postavená na frameworku Irony parser. Dosahuje úspěšnosti 99,9 % při zpracování více než milionu reálných vzorců a je speciálně navržena pro analýzu a refaktoring tabulek. Jeho kompaktní gramatika — méně než 100 tokenů a produkčních pravidel — usnadňuje pochopení, údržbu nebo přenos do jiných jazyků. XLParser slouží jako referenční implementace Excelové gramatiky publikované v článku „A Grammar for Spreadsheet Formulas Evaluated on Two Large Datasets“ a podporuje benchmarkové soubory Enron a EUSES.
XLParser vytváří kompaktní parse stromy, což umožňuje efektivní procházení, analýzu a transformaci vzorců. Vývojáři mohou použít třídu `ExcelFormulaParser` k parsování vzorců a extrahování názvů funkcí, odkazů a podvýrazů. Třída `FormulaAnalyzer` dále podporuje pokročilé operace jako `ParserReferences()`, která získá všechny buňky, rozsahy a pojmenované odkazy. Díky zaměření na výzkum a nástroje je XLParser ideální pro zajištění kvality tabulek, refaktorování vzorců a vzdělávací nástroje. Můžete vyzkoušet online demo, nainstalovat přes NuGet nebo sestavit ze zdrojového kódu na [XLParser GitHub](https://github.com/spreadsheetlab/XLParser).
Začínáme s XLParser
XLParser je k dispozici přes NuGet a lze jej nainstalovat pomocí Package Manager Console nebo NuGet UI ve Visual Studiu. Nejjednodušší způsob je spustit `Install-Package XLParser` v Package Manager Console. Případně můžete stáhnout nejnovější verzi z [XLParser GitHub](https://github.com/spreadsheetlab/XLParser), sestavit řešení a přímo odkazovat na DLL. Knihovna je postavena na parserovém rámci Irony a nevyžaduje žádné další závislosti. Po instalaci můžete začít parsovat Excelové vzorce pomocí třídy `ExcelFormulaParser`. Její metoda `Parse()` přijímá řetězec vzorce a vrací strom parsování pro další analýzu nebo transformaci.
Instalovat XLParser přes NuGet
Install-Package XLParserVysoce kompatibilní parsování Excelových vzorců
XLParser dosahuje 99,9% úspěšnosti parsování více než milionu reálných Excelových vzorců, což z něj činí jeden z nejspolehlivějších dostupných parserů vzorců v C#. Byl ověřen na široce používaných benchmarkových souborech Enron a EUSES a je navržen tak, aby zvládal složité, vnořené a reálné vzorce – včetně poleových výrazů, odkazů a funkcí. Přestože XLParser není příliš restriktivní (může parsovat některé vzorce, které by Excel odmítl), tato shovívavost je úmyslná pro výzkumné a analytické případy použití. Vývojáři mohou XLParser důvěřovat při parsování drtivé většiny vzorců, se kterými se setkají ve výrobních tabulkách, což umožňuje robustní analýzu vzorců, refaktoring a workflow zajištění kvality. Jeho kompaktní gramatika zajišťuje udržovatelnost a přenositelnost napříč parserovými frameworky.
Zpracovat Excelový vzorec a prozkoumat syntaktický strom
using XLParser;
var parser = new ExcelFormulaParser();
var tree = parser.Parse("SUM(A1:B10, C12)");
Console.WriteLine(tree.Print());Extrahovat všechny odkazy z Excelových vzorců
XLParser zahrnuje třídu `FormulaAnalyzer`, která poskytuje výkonné metody pro analýzu parsovaných vzorců. Jednou z jejích klíčových funkcí je `ParserReferences()`, která vrací všechny buňky, rozsahy, pojmenované rozsahy a horizontální/vertikální odkazy použité ve vzorci. To je neocenitelné pro sledování závislostí, analýzu dopadů a nástroje pro refaktoring. Například pro vzorec jako `SUM(A1:B10, C12, NamedRange)` vrátí `ParserReferences()` seznam `A1:B10`, `C12` a `NamedRange`. To umožňuje vývojářům vytvářet nástroje pro audit tabulek, vizualizovat tok dat nebo detekovat kruhové závislosti. Metoda funguje hladce s kompaktní strukturou stromu parsování, zajišťuje rychlé a přesné získávání i pro velké vzorce.
Extrahovat všechny odkazy pomocí 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());
}Procházet a analyzovat syntaktické stromy
Parse stromy XLParseru jsou navrženy pro efektivní procházení a analýzu. Třída `ExcelFormulaParser` poskytuje metody jako `AllNodes` k iteraci přes každý uzel ve stromu, což umožňuje vlastní analýzu, transformaci nebo validační logiku. Vývojáři mohou filtrovat uzly podle typu (např. funkce, reference, operátory) a provádět operace jako počítání výskytů funkcí, detekci nepoužívaných pojmenovaných oblastí nebo identifikaci potenciálních chyb. Metoda `GetFunction()` usnadňuje získávání názvů funkcí z uzlů volajících funkce, zatímco `Print()` umožňuje rychlé ladění nebo logování struktury libovolného uzlu. Tyto možnosti činí XLParser ideálním pro tvorbu nástrojů pro kontrolu kvality tabulek, asistenty refaktoringu a vzdělávací vizualizace.
Procházet všechny uzly a extrahovat názvy funkcí
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()}");
}Ladit a vizualizovat syntaktické stromy
XLParser úzce integruje s nástrojem GrammarExplorer od Irony pro interaktivní ladění a vizualizaci stromu. Po sestavení XLParser a řešení GrammarExplorer můžete načíst `XLParser.dll` jako gramatiku a testovat vzorce v reálném čase. Během vývoje debugger Visual Studio podporuje inspekci uzlů parse stromu prostřednictvím okna watch pomocí `yournode.Print(),ac`. Tato funkce urychluje pochopení složitých vzorců, testování hraničních případů a ověřování pravidel gramatiky. Kompaktní struktura stromu zajišťuje, že i hluboce vnořené vzorce zůstávají čitelné a spravovatelné. Ať už vytváříte nástroj pro analýzu tabulek nebo zkoumáte chování Excelových vzorců, podpora ladění v XLParseru zjednodušuje vývoj a odstraňování problémů.
Ladit uzel syntaktického stromu ve Visual Studio Watch okně
var tree = parser.Parse("IF(A1>0, A1*2, 0)");
// In Watch window: tree.Print(),ac