Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2010, 00:32   #1
bdfy
Форумчанин
 
Регистрация: 12.11.2009
Сообщений: 258
По умолчанию VBA разобрать формулу Excel (польская нотация)

Нужно проанализировать формулу Excel
произвольного вида
например
0.507*( ( B5*B10*B8*B17*( B12+B45 ) )/ (исх!B7*'2'!B21*B23*'2'!B29^2))^(1/4)
нужно разобрать ее по действиям для дальнейшей обработки.
поиск показал что необходим алгоритм польской нотации. т.е еxcelевскую формулу нужно записать в виде обратной польской (постфиксной) записи
кто нибудь видел реализацию на VBA ?

Последний раз редактировалось bdfy; 26.02.2010 в 00:37.
bdfy вне форума Ответить с цитированием
Старый 26.02.2010, 01:22   #2
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Какая дальнейшая обработка планируется?
Почему вопрос задаёте в разделе по MS Word?
Алгоритм перевода в обратную польскую нотацию можно найти в куче мест.
Например: http://algolist.manual.ru/maths/misc/revpn.php
http://ru.wikipedia.org/wiki/%D0%9E%...B8%D1%81%D1%8C

Конечно если ещё парсить все виды цифровых констант и функций рабочего листа - будет сложнее.
В зависимости от конкретной задачи и конечных целей есть разные варианты
Aent вне форума Ответить с цитированием
Старый 26.02.2010, 02:21   #3
bdfy
Форумчанин
 
Регистрация: 12.11.2009
Сообщений: 258
По умолчанию

Цитата:
Почему вопрос задаёте в разделе по MS Word?
немножко промахнулся )

Цитата:
Какая дальнейшая обработка планируется?
дальше буду формировать отчет в Word по этим формулам. через поля EQ Word'овские как вариант.
т.е было условно говоря =B5/B10
нужно получить =\f(B5;B10)
для простых формул уже реализовал через RegEx, но на сложносоставных все некорректно работает. определить порядок скобок через RegEx как то ведь мало реально.

алгоритм конечно расписан,но изобретать с нуля велосипед пока не хочется ) вдруг готовые решения есть ?

Цитата:
Конечно если ещё парсить все виды цифровых констант и функций рабочего листа - будет сложнее.
а вот с этим проблем больших нет. по сути единственная проблема - анализ скобок для корректного деления и возведения в степень.

Последний раз редактировалось bdfy; 26.02.2010 в 04:24.
bdfy вне форума Ответить с цитированием
Старый 26.02.2010, 05:04   #4
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Непонятно - что тогда мешает производить все вычисления в среде
EXCEL. Не надо ничего интерпретировать - надо создать объект EXCEL
и в его среде всё вычислить. А затем заполнить документ WORD итоговыми данными.
Aent вне форума Ответить с цитированием
Старый 26.02.2010, 05:06   #5
bdfy
Форумчанин
 
Регистрация: 12.11.2009
Сообщений: 258
По умолчанию

все вычисления уже выполнены в среде ексель.
нужно сделать по этим расчетам отчет в Word. показав все формулу с промежуточными вычислениями. это возможно только если разобрать формулу екселевскую.
bdfy вне форума Ответить с цитированием
Старый 11.06.2013, 21:24   #6
bati4eli
 
Регистрация: 02.05.2012
Сообщений: 3
Радость

У меня есть подобная вещица, правда основная цель моей надстройки разобрать формулу на ссылки на другие диапазоны.
Основной принцип работы надстройки это чтение формулы слева направо, при этом если встречается одинарная ковычка, то впереди идет диапазон, если не открыта двойная ковычка и наоборот если открыта двойная ковычка, то пока она не закроется макрос не реагирует на одинарные ковычки а так же на знаки вычетания, сложения и другие.
Если после таких знаков попадается первым символом буква, число или знак доллара, то дальше макрос читает до следуещего знака "действия", если на пути ничего не встретилось вроме чисел и запятых, то это число, если встретилось двоеточие то ... короче там дофига всего ))
Весь анализ у меня ушел на строчек 60-100.
Но я думаю ты алгоритм поймешь.
Вот ссылочка на надстройку: http://yadi.sk/d/eViRFYe55iFXY
А если не заблокируют следующую ссылку, то смотри мой блог по этой надстройке: http://www.cyberforum.ru/blogs/275793/blog1086.html
bati4eli вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA Word,VBA Excel решить 2 задачи fafolo4ka Фриланс 6 05.03.2012 01:15
Обратная польская нотация Sexy Fox Помощь студентам 9 22.09.2011 14:57
Обратная польская нотация Izhic Свободное общение 17 02.10.2009 23:43
VBA. Как воткнуть переменную String в формулу? svetlana_A Microsoft Office Excel 3 26.05.2009 09:20
Обратная польская нотация Sexy Fox Помощь студентам 2 22.06.2007 13:27