Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вставка формулы в Word

31K
08 июля 2008 года
lss
19 / / 03.04.2008
Hi. Помогите пожалуйста, ни как не получается вставить формулу в вордовский документ.
В VBA формула вставляется так: (формула x=1/2)

Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, PreserveFormatting:=False
Selection.TypeText Text:="[COLOR="Blue"]EQ x=\f(1;2)[/COLOR]"
Selection.Fields.Update

Пробую на С++Buildere

Variant Word=CreateOleObject("[COLOR="Blue"]Word.Application[/COLOR]");
Word.OlePropertySet("[COLOR="Blue"]Visible[/COLOR]",1);
Variant Documents=Word.OlePropertyGet("[COLOR="Blue"]Documents[/COLOR]");
Documents.OleProcedure("[COLOR="Blue"]Add[/COLOR]");
Variant ActiveDocument=Word.OlePropertyGet("[COLOR="Blue"]ActiveDocument[/COLOR]");
Variant Tables=ActiveDocument.OlePropertyGet("[COLOR="Blue"]Tables[/COLOR]");
ActiveDocument.OleProcedure("[COLOR="Blue"]Select[/COLOR]");
Variant Selection = Word.OlePropertyGet("[COLOR="Blue"]Selection[/COLOR]");
Selection.OleProcedure("TypeText", "[COLOR="Blue"]EQ x=\f(1;2)[/COLOR]");

Вместо формулы вставляется текст, помогите разобраться.
Возможно есть другие возможности, советуйте!
За ранее, Спасибо!
14
08 июля 2008 года
Phodopus
3.3K / / 19.06.2008
Формула, это Equation или что?
31K
08 июля 2008 года
lss
19 / / 03.04.2008
Да Equation...
или MathType!
14
09 июля 2008 года
Phodopus
3.3K / / 19.06.2008
Тогда логично что тект вставляется, для начала надо объект Equation вставить.
Проверил бы как, да нету Ворда на работе..
Неужели в макросе этот момент упускается?
31K
09 июля 2008 года
lss
19 / / 03.04.2008
Когда записываешь макрос в Worde, в Макросе не прописывается создание MathType.
Equation не проверял... но на форумах читал: что тоже не записывается!
14
09 июля 2008 года
Phodopus
3.3K / / 19.06.2008
Ну если не забуду дома попробую
14
10 июля 2008 года
Phodopus
3.3K / / 19.06.2008
У меня с Equation-ом все записалось. InlineShapes.AddOleObject("Equation", "", False, False)
Только вот Equation дальше не автоматизируется..
31K
10 июля 2008 года
lss
19 / / 03.04.2008
Тоже самое с MathType :(

попробуй в макросе прописать следующее:

Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, PreserveFormatting:=False
Selection.TypeText Text:="EQ x=\f(1;2)"
Selection.Fields.Update

Это спец вставка: EQ - формула...
Сможешь это повторить на С++Buildere?
14
11 июля 2008 года
Phodopus
3.3K / / 19.06.2008
Цитата: lss
Сможешь это повторить на С++Buildere?



так текст получится - я и так вижу..
надо поискать про автоматизацию MathType че-нить, а то объект формулы-то вставляется, да только он пустой

попробую, но результаты - после выходных

31K
14 июля 2008 года
lss
19 / / 03.04.2008
Цитата: Phodopus
так текст получится - я и так вижу..


Получается формула - после запуска выше указанного маркросса....
У меня, не получается реализовать на с++... вот в чем дело!!!

14
14 июля 2008 года
Phodopus
3.3K / / 19.06.2008
Цитата: lss
Получается формула...



хм, мистика! :) действительно формула! :)
Держи, я вот так сделал. Кстати хотельсь бы узнать побольше этих escape-кодов, которые в поле EQ создаются. У меня создать такое поле кроме как "ручками" - не вышло. Не через спец вставку, не через вставку объекта - вставляется Equation.3 поле и все тут. И никакого там содержимого. Скорее всего из-за отсутствия MathType..

 
Код:
WordApplication->Connect();
  WordDocument->ConnectTo(WordApplication->Documents->Add());
  WordApplication->set_Visible(true);
  TOleString txt("EQ x=\\f(1;2)");
  WordDocument->ActiveWindow->ActivePane->Selection->Fields->Add(
    WordDocument->ActiveWindow->ActivePane->Selection->Range,
    (OleVariant)wdFieldEmpty,
    (OleVariant)txt,
    (OleVariant)false
  );
31K
14 июля 2008 года
lss
19 / / 03.04.2008
Спасибо... работает!!!
14
15 июля 2008 года
Phodopus
3.3K / / 19.06.2008
Нравится мне в последнее время английское "You are welcome!" :)
Спрошу еще раз: не знаешь где можно раздобыть описание этих escape-кодов?
246
15 июля 2008 года
GIZMO
1.8K / / 30.07.2004
а InsertFormula не подойдет, чтоб 1 на 2 разделить?
31K
16 июля 2008 года
lss
19 / / 03.04.2008
Цитата: Phodopus

Спрошу еще раз: не знаешь где можно раздобыть описание этих escape-кодов?



В хелпе ворда 2003 описано, сразу с примерами, мне понравилась.

31K
16 июля 2008 года
lss
19 / / 03.04.2008
Цитата: GIZMO
а InsertFormula не подойдет, чтоб 1 на 2 разделить?



InsertFormula используется для подсчета... а мне нужно было отобразить
"красиво" формулы.

14
16 июля 2008 года
Phodopus
3.3K / / 19.06.2008
Цитата: lss
В хелпе ворда 2003 описано, сразу с примерами, мне понравилась.



ммм.. поподробнее раздельчик как найти?

31K
16 июля 2008 года
lss
19 / / 03.04.2008
Цитата: Phodopus
ммм.. поподробнее раздельчик как найти?



В поиске набирай: EQ
И он выдаст все параметры, синтаксис... вобщем все что нужно для работы.

14
16 июля 2008 года
Phodopus
3.3K / / 19.06.2008
Цитата: lss
В поиске набирай: EQ



Спасибо, вечером проверю :)

246
16 июля 2008 года
GIZMO
1.8K / / 30.07.2004
Цитата: lss
InsertFormula используется для подсчета... а мне нужно было отобразить
"красиво" формулы.



оопс точно:)

87K
09 января 2013 года
erik82
2 / / 09.01.2013
Помогите, пожалуйста! Сделал все как написано выше, но при компиляции ругается:

[BCC32 Error] Unit2.cpp(35): E2451 Undefined symbol 'wdFieldEmpty'
Full parser context
Unit2.cpp(23): parsing: void _fastcall TForm2::FormCreate(TObject *)

вот сам код:

Код:
#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#pragma link "Word_XP_srvr"
#include "ComObj.hpp"

TForm2 *Form2;
TWordApplication *WordApplication1;
TWordDocument * WordDocument1;
//---------------------------------------------------------------------------
_fastcall TForm2::TForm2(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormCreate(TObject *Sender)
{
    WordApplication1 = new TWordApplication(this);
    WordApplication1->ConnectKind = ckNewInstance;
    WordApplication1->AutoQuit = true;
    WordDocument1 = new TWordDocument(this);
    WordApplication1->Connect();
    WordDocument1->ConnectTo(WordApplication1->Documents->Add());
    WordApplication1->set_Visible(true);
    TOleString txt("EQ x=\\f(1;2)");
    WordDocument1->ActiveWindow->ActivePane->Selection->Fields->Add
        (
        WordDocument1->ActiveWindow->ActivePane->Selection->Range,
        (OleVariant)wdFieldEmpty,
        (OleVariant)txt,
        (OleVariant)false
        );
}
Собственно, вопрос- что я сделал не так?

Писал в RAD Studio XE, на компьютере установлен Office 2010. Макрос, описанный выше, проверял- работает
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог