Вставка формулы в Word
В 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]");
Вместо формулы вставляется текст, помогите разобраться.
Возможно есть другие возможности, советуйте!
За ранее, Спасибо!
или MathType!
Проверил бы как, да нету Ворда на работе..
Неужели в макросе этот момент упускается?
Equation не проверял... но на форумах читал: что тоже не записывается!
Только вот Equation дальше не автоматизируется..
попробуй в макросе прописать следующее:
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, PreserveFormatting:=False
Selection.TypeText Text:="EQ x=\f(1;2)"
Selection.Fields.Update
Это спец вставка: EQ - формула...
Сможешь это повторить на С++Buildere?
так текст получится - я и так вижу..
надо поискать про автоматизацию MathType че-нить, а то объект формулы-то вставляется, да только он пустой
попробую, но результаты - после выходных
Получается формула - после запуска выше указанного маркросса....
У меня, не получается реализовать на с++... вот в чем дело!!!
хм, мистика! :) действительно формула! :)
Держи, я вот так сделал. Кстати хотельсь бы узнать побольше этих escape-кодов, которые в поле EQ создаются. У меня создать такое поле кроме как "ручками" - не вышло. Не через спец вставку, не через вставку объекта - вставляется Equation.3 поле и все тут. И никакого там содержимого. Скорее всего из-за отсутствия MathType..
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
);
Спрошу еще раз: не знаешь где можно раздобыть описание этих escape-кодов?
Спрошу еще раз: не знаешь где можно раздобыть описание этих escape-кодов?
В хелпе ворда 2003 описано, сразу с примерами, мне понравилась.
InsertFormula используется для подсчета... а мне нужно было отобразить
"красиво" формулы.
ммм.. поподробнее раздельчик как найти?
В поиске набирай: EQ
И он выдаст все параметры, синтаксис... вобщем все что нужно для работы.
Спасибо, вечером проверю :)
"красиво" формулы.
оопс точно:)
[BCC32 Error] Unit2.cpp(35): E2451 Undefined symbol 'wdFieldEmpty'
Full parser context
Unit2.cpp(23): parsing: void _fastcall TForm2::FormCreate(TObject *)
вот сам код:
#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. Макрос, описанный выше, проверял- работает