наболевший вопрос о вставке формулы в MS Word
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.82] |
|
|
Правила раздела C/C++: Системное программирование и WinAPI
FAQ Сайта (C++)
FAQ Форума
Наши Исходники
Поиск по Разделу
MSDN Library Online (Windows Driver Kit)
Google
наболевший вопрос о вставке формулы в MS Word
|
Сообщ.
#1
,
|
|
|
|
всталяю формулу в word таким способом:
![]() ![]() ... SelectionPtr pSelection = pWordApp->Selection; TCHAR val[255] = _T("EQ \\f(2;c+1)")); // например, формула "2 / c+1" pSelection->Fields->Add(pSelection->Range,&_variant_t(wdFieldEmpty),&_variant_t(_bstr_t(val)),&_variant_t(false)); pSelection->Collapse(); ... пользуюсь OLB файлом от 97 ворда (msword8.olb), хотя суть проблемы не в этом. формула замечательно вставляется начиная с 97 ворда и по 2007 включительно (2010 просто не проверял). но есть одна "маленькая" проблемка. если вставленную мной формулу открыть на редактирование, то в вордах 97-2003 она открывается нормально, но после сбрасывания фокуса меняется шрифт (не совсем понятно почему, но это еще терпимо). а вот в 2007 ворде при попытке зайти внутрь этой самой формулы сам ворд (вернее редактор формул) выдает сообщение "Формула слишком велика для преобразования" и полностью стирает саму формулу оставляя пустой объект Equation. По интернету ходят слухи , что нужно создавать отдельно объект Equation, например, так:![]() ![]() pSelection->InlineShapes->AddOLEObject(&_variant_t(_bstr_t(_T("Equation.3"))), &_variant_t(_bstr_t(_T(""))), &_variant_t(false), &_variant_t(false)); а потом в него писать формулу, но, естественно слухи примерами не подтверждаются. Так вот меня интересует, как ПРАВИЛЬНО вставлять формулу в ворд, чтоб не было таких приколов, с которыми я сейчас столкнулся ? |
|
Сообщ.
#2
,
|
|
|
|
Используй второй способ.
Где не понятного? |
|
Сообщ.
#3
,
|
|
|
|
да кругом не понятно.
![]() ![]() pSelection->Fields->Add(pSelection->Range,&_variant_t(wdFieldEmpty),&_variant_t(_bstr_t(val)),&_variant_t(false)); эта штука создает просто поле, в которое пишется строка, по которой сам ворд понимает, что это формула. ИМХО, так и следует делать, т.к. сам компонент Equation может быть не установлен на компьютере, но формула все равно отобразится. Допустим, я точно знаю, что он (компонент) установлен (это не трудно выяснить, покопавшись в системных папках ) и хочу ПРАВИЛЬНО создать формулу![]() ![]() pSelection->InlineShapes->AddOLEObject(&_variant_t(_bstr_t(_T("Equation.3"))), &_variant_t(_bstr_t(_T(""))), &_variant_t(false), &_variant_t(false)); этот код создает ОБЪЕКТ Equation. А как добавить строку В НЕГО? |
|
Сообщ.
#4
,
|
|
|
|
Нужно передать строку как SendKeys.Send("Моя формула");
Equation не имеет интерфейс для работы через код, или используй OMath. |
|
Сообщ.
#5
,
|
|
|
|
на сколько я знаю, SendKeys - это для VBA.
можно примерчик на С++? Допустим у меня есть переменная, где будет храниться формула (TCHAR val[255]) Вот как засунуть "val" внутрь создаваемого объекта Equation? |
|
Сообщ.
#6
,
|
|
|
|
![]() ![]() for(int q=0;q<l;q++) { keybd_event(val[q], 0, 0 ,0); keybd_event(val[q], 0, KEYEVENTF_KEYUP,0); } Если объект активно и видно, иначе никак. Добавлено Цитата gonini @ на сколько я знаю, SendKeys - это для VBA. На Visual Studio.Net такого было. |
|
Сообщ.
#7
,
|
|
|
|
м-да, придется остаться с тем что есть сейчас, т.к. вариант с SendKeys не подходит в принципе:
1. документ должен быть видим. (не хочу раздражать пользователя мультиком под название "формирование отчета" )2. sendkeys эмулирует работу клавиатуры и мышки и не имеет никакого отношения к ключевым словам формулы (а ну ка навскидку, куда должна клацнуть мышка (причем несколько раз), чтоб на экране появился значек интеграла ![]() ![]() и это при разных разрешениях монитора и т.п.)3. нашел вариант когда поле EQ не преобразуется в формулу и в 2003 ворде. PS: попробую разобраться в чем причина (это по поводу ворда 2003), возможно это поможет "вылечить" и ворд 2007. если получится, отпишусь о результатах. |