powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Распарзить выражение (формулу Excel)
14 сообщений из 14, страница 1 из 1
Распарзить выражение (формулу Excel)
    #39718624
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, как подойти к решению такой задачи оптимальным способом?

Необходимо взять строковое написание произвольной формулы Excel

"=C3/G$6", "=SQRT(SUM(A1:B3)/AVG([$D33:F$1])*FF88)" и т.п.

найти все координаты (A1,B3, FF88), изменить их по заданным правилам и собрать формулу в исходном виде с новыми координатами.

Regex может оказать недостаточно, чтобы решить эту задачу (либо может кто-то подскажет, как круто подойти к данной проблеме на Regex). А к Excel Automation прибегать не хочется.

Нежно что-то вроде ExpressionTrees, но не полномасштабный компилятор.
...
Рейтинг: 0 / 0
Распарзить выражение (формулу Excel)
    #39718628
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в стиле RC не проще работать будет, или по ТЗ это невозможно?
...
Рейтинг: 0 / 0
Распарзить выражение (формулу Excel)
    #39718631
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С другой стороны, почему не поможет Regex?
несколько букв+несколько цифр с необязательным префиксом $
Диапазоны через двоеточие, без двоеточия - отдельные ячейки
Что я упускаю?
...
Рейтинг: 0 / 0
Распарзить выражение (формулу Excel)
    #39718635
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProА в стиле RC не проще работать будет, или по ТЗ это невозможно?

В файле координаты лежать в классическом стиле даже если визуальны вы видите RC.
...
Рейтинг: 0 / 0
Распарзить выражение (формулу Excel)
    #39718636
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

вот здесь заменять не надо "Это строка A1". Поэтому regex может оказаться сложным
...
Рейтинг: 0 / 0
Распарзить выражение (формулу Excel)
    #39718637
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужен Tokenizer
...
Рейтинг: 0 / 0
Распарзить выражение (формулу Excel)
    #39718653
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voroninвот здесь заменять не надо "Это строка A1". Поэтому regex может оказаться сложнымОк, исключить строковые литералы внутри формул (можно сделать до поиска ячеек). Что еще?
...
Рейтинг: 0 / 0
Распарзить выражение (формулу Excel)
    #39718695
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С другой стороны, формулы экселя имеют довольно-таки стандартный синтаксис, поэтому можно попробовать использовать каую-либо библиотеку разбора формул, а потом просмотреть список аргументов на предмет соответствия паттерну адреса диапазона или адреса ячейки. Но я бы попробовал обойтись все-таки обработкой строк, возможно, я просто не вижу еще каких-то противопоказаний, которые видите вы.

ЗЫ: вспомнил еще один вариант задания диапазона А:А, A:F, 1:1, нужно будет тоже учесть
...
Рейтинг: 0 / 0
Распарзить выражение (формулу Excel)
    #39718763
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Вопрос, что именно рекомендуется взять. Ибо регулярки писать у меня проблем нет.

Код: c#
1.
2.
3.
4.
5.
        /// Регулярное выражение для разбора диапазона в формате 'Лист1!AC25:BD670' с выявлением компонентов
        /// sheet='Лист1' R1 = '25' C1 = 'AC' R2 = '670' C2 = 'BD'
        /// </summary>
        static Regex namedRangeMatch = new Regex(
            "\\'?(?<sheet>([^,'!]+)|[^,'!]+)\\'?\\!\\$?(?<C1>[A-Z]+)\\$?(?<R1>[0-9]+)\\:\\$?(?<C2>[A-Z]+)\\$?(?<R2>[0-9]+)");
...
Рейтинг: 0 / 0
Распарзить выражение (формулу Excel)
    #39718776
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voroninкак круто подойти к данной проблеме на Regexa_voroninИбо регулярки писать у меня проблем нет.не, лично я не подскажу с библиотекой, не использовал такие, я думал, проблема с Regex, да и не увидел пока проблемы сделать это на Regex
...
Рейтинг: 0 / 0
Распарзить выражение (формулу Excel)
    #39718777
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ:a_voronin
Код: c#
1.
2.
        static Regex namedRangeMatch = new Regex(
            "\\'?(?<sheet>([^,'!]+)|[^,'!]+)\\'?\\!\\$?(?<C1>[A-Z]+)\\$?(?<R1>[0-9]+)\\:\\$?(?<C2>[A-Z]+)\\$?(?<R2>[0-9]+)");

Все же регулярку куда как проще писать и анализировать через @""
...
Рейтинг: 0 / 0
Распарзить выражение (формулу Excel)
    #39718973
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voroninНужен Tokenizer
Браво.
Вы в гугл заглядывали? Если что - по запросу в выдаче первая ссылка ведет на SoF , на котором вторая ссылка вот сюда . В тексте внизу - ссылка на архив с проектом парсера. Парсер сделан как раз на токенайзере.
...
Рейтинг: 0 / 0
Распарзить выражение (формулу Excel)
    #39719023
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловныa_voroninНужен Tokenizer
Браво.
Вы в гугл заглядывали? Если что - по запросу в выдаче первая ссылка ведет на SoF , на котором вторая ссылка вот сюда . В тексте внизу - ссылка на архив с проектом парсера. Парсер сделан как раз на токенайзере.

Заглядывал, только выбрал не первую ссылку, а четвертую

https://github.com/spreadsheetlab/XLParser
и уже допили этот проект под свои нужды.
...
Рейтинг: 0 / 0
Распарзить выражение (формулу Excel)
    #39719154
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voroninЗаглядывал, только выбрал не первую ссылку, а четвертую

https://github.com/spreadsheetlab/XLParser
и уже допили этот проект под свои нужды.
Да, эта библиотека получше будет. Да и поновее.
А регэкспами такие задачи в общем случае не являются - вложенные конструкции произвольной глубины (и не дай б-г контекстно-зависимые) автоматными языками не являются (а RE - это конечный автомат).
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Распарзить выражение (формулу Excel)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]