
XLParser
Открытый парсер формул Excel на C#
Разбирайте, анализируйте и обходите формулы Excel с высокой точностью, используя компактные деревья разбора через открытую библиотеку C#.
Что такое XLParser?
XLParser — это высокоточная библиотека C# для разбора формул Microsoft Excel, построенная на основе парсера Irony. Она обеспечивает 99,9 % успеха при обработке более миллиона реальных формул и специально разработана для анализа и рефакторинга электронных таблиц. Ее компактная грамматика — менее 100 токенов и правил продукции — делает её простой для понимания, поддержки и портирования на другие языки. XLParser служит эталонной реализацией грамматики Excel, опубликованной в статье “A Grammar for Spreadsheet Formulas Evaluated on Two Large Datasets”, и поддерживает наборы данных benchmark Enron и EUSES.
XLParser создает компактные деревья разбора, обеспечивая эффективный обход, анализ и трансформацию формул. Разработчики могут использовать класс `ExcelFormulaParser` для разбора формул и извлечения имён функций, ссылок и подвыражений. Класс `FormulaAnalyzer` дополнительно поддерживает расширенные операции, такие как `ParserReferences()`, для получения всех ссылок на ячейки, диапазоны и именованные ссылки. С акцентом на исследования и инструменты, XLParser идеально подходит для обеспечения качества электронных таблиц, рефакторинга формул и образовательных инструментов. Вы можете попробовать онлайн‑демо, установить через NuGet или собрать из исходного кода на [XLParser GitHub](https://github.com/spreadsheetlab/XLParser).
Начало работы с XLParser
XLParser доступен через NuGet и может быть установлен с помощью консоли диспетчера пакетов или интерфейса NuGet в Visual Studio. Самый простой способ — выполнить `Install-Package XLParser` в консоли диспетчера пакетов. При желании вы можете скачать последнюю версию с [XLParser GitHub](https://github.com/spreadsheetlab/XLParser), собрать решение и напрямую подключить DLL. Библиотека построена на основе парсерного фреймворка Irony и не требует дополнительных зависимостей. После установки вы можете начать разбирать формулы Excel, используя класс `ExcelFormulaParser`. Его метод `Parse()` принимает строку формулы и возвращает дерево разбора для дальнейшего анализа или трансформации.
Установите XLParser через NuGet
Install-Package XLParserПарсинг формул Excel с высокой совместимостью
XLParser обеспечивает 99,9 % успешный уровень разбора более чем миллиона реальных формул Excel, делая его одним из самых надёжных парсеров формул 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 тесно интегрируется с инструментом GrammarExplorer от Irony для интерактивной отладки и визуализации деревьев. После сборки 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