Разработка многомодульных интегрированных SDI-приложений (5. Работа с сервером Word)

Посмотреть архив целиком

Работа с сервером WORD

На странице Servers (или Office2k, или Office97) находятся компоненты, относящиеся к текстовому редактору Word. Компонент WordApplication отвечает за связь с редактором. Свойство AutoConnect =true означает, что соединение с сервером происходит в момент начала выполнения приложения. По умолчанию принято значение false, при этом соединение с сервером можно осуществить вызовом метода Connect:

WordApplication1-> Connect();

Значения свойства ConnectKind определяют, каким образом происходит соединение:

ckNewInstance – всегда создавать экземпляр сервера. Это значение следует выбирать, чтобы избежать опасности испортить какой-либо документ в уже выполняющемся сервере;

ckRunningInstance – обеспечить только подсоединение к выполняющемуся серверу. Годится, когда приложение должно работать с каким-то открытым документом сервера;

ckRemote – выбирается для удаленного сервера;

ckRunningOrNew – значение выбираемое по умолчанию обеспечивает соединение с уже открытым сервером или создание нового.

После запуска сервера его окно может оставаться невидимым для пользователя. Сделать окно приложения Word видимым можно так:

// для Builder5

WordApplication1-> Visible=true;

// для Builder6

WordApplication1-> set_Visible(true);

Установить местоположение и размеры окна:

WordApplication1 ->set_Left(0);

WordApplication1 ->set_Top(0);

WordApplication1 -> set_Height(200);

WordApplication1 ->set_Width(300);


WordApplication1->Disconnect(); - разрыв связи с сервером. Вызов этого метода очень важен, особенно, когда приложение сервер не видимо для пользователя.

Свойство AutoQuit = true автоматически вызовет завершение сервера при завершении программы клиента (это полезно когда ConnectKind = ckNewInstance, т.е. приложение создало новый экземпляр сервера).


Работа с компонентом WordApplication

Создание нового документа

При создании нового документа он будет добавлен к коллекции открытых в настоящий момент документов Word – Documents. Для создания документа на основе шаблона Normal в Office2k необходимо использовать оператор:

WordApplication1 -> Documents -> Add (EmptyParam,EmptyParam,EmptyParam,true);

А в Office97:

WordApplication1 -> Documents -> Add(EmptyParam, EmptyParam);

В этом случае создается документ WORD с параметрами по умолчанию, если нужно создать шаблон или документ на основе своего шаблона нужно использовать параметры.

Проверка наличия открытых документов

Свойство Count коллекции документов Documents позволяет узнать количество открытых в настоящий момент документов. Следующий оператор, например, позволяет проверить наличие открытых документов:

if (WordApplication1->Documents->Count==0)

Свойство Name содержит имя документа. Следующий код позволяет получить список имен всех открытых документов:

TVariant a;

int n, i;

n=WordApplication1->Documents->Count;

for (i=1; i<=n; i++)

{ a=(TVariant)i;

Memo1->Lines->Add(WordApplication1->

Documents->Item(&a)->Name);

}

Работа с текстом

При работе с текстом удобно использовать объект Selection. Selection - это выделенный объект текста в активном документе, а при отсутствии выделения текущая позиция курсора.

Методы InsertBefore и InsertAfter вставляют текст в документ соответственно до и после выделенного фрагмента.

  • Вставка абзаца текста:

WordApplication1 -> Selection -> InsertAfter

(TVariant(“Московский энергетический институт\n”));

  • Пустая строка (абзац):

WordApplication1 -> Selection -> InsertAfter (TVariant(“\n”));

  • Текст из разных источников:

WordApplication1 -> Selection -> InsertAfter

(TVariant(“Уважаемый” + Edit1->Text + “!\n”));


Все вставляемые фрагменты будут присоединяться к объекту Selection, а курсор перемещаться на первую позицию после вставленного текста, поэтому следующий оператор вставит текст перед всем выделенным фрагментом:

WordApplication1 -> Selection -> InsertBefore (TVariant(“ГПИ”));


Метод TypeText вставляет или заменяет выделенный текст. Если свойство ReplaceSelection =false, текст будет вставлен в документ перед выделенным фрагментом, иначе (значение true) новый текст заменит весь выделенный фрагмент.

Например, следующий код уничтожит все что мы вставили в документ предыдущими операторами:

WordApplication1 ->Options->ReplaceSelection = true;

WordApplication1-> Selection -> TypeText (TVariant(“Новый текст”);

Свертывание выделения

Выделение можно свернуть, вызвав метод Collapse. Курсор переместится к началу (wdCollapseStart) или к концу выделенного фрагмента (wdCollapseEnd).

TVariant Direction=wdCollapseEnd;

WordApplication1->Selection->Collapse(&Direction);

Выделение всего документа

Очень часто требуется выполнение команды «Выделить все», следующий метод позволяет это сделать программно:

WordApplication1->Selection->WholeStory();

Вставка картинки в документ

Clipboard()->Assign(Image1->Picture);

WordApplication1->Selection->Paste();


Работа с компонентом WordDocument


Присоединение к активному документу:

WordDocument1 -> ConnectTo ( WordApplication1 -> ActiveDocument);


Выделение фрагментов в документе

Content – объект отражающий весь текст документа. С его помощью можно изменить свойства текста, например,

WordDocument1 -> Content->Font->Bold=0;


Текст в документе разбивается на непрерывные фрагменты (объекты Range). Такой объект можно создать специальным методом, например, следующий код позволяет работать с третьим абзацем документа:

TVariant i=3;

RangePtr MyRange;

MyRange=WordApplication1 -> ActiveDocument->Paragraphs->Item(i)->get_Range();

MyRange->Font->Italic=true;

Также можно указать номера символов, ограничивающих интересующий нас фрагмент документа:

TVariant i=1, j=20;

RangePtr MyRange=WordDocument1->Range(&i,&j);

MyRange->Font->Italic=true;


Следующий код позволяет выделить объект Range и вставить перед ним текст:

TVariant i=2;

WordDocument1->Paragraphs->Item(i)->get_Range()->Select();

WordApplication1-> Selection->InsertBefore(TVariant("Москва"));

Закрытие документа

Метод Close выполняет закрытие документа.

WordDocument1->Close();

Если документ был изменен, то Word предложит сохранить его. Для подавления этого запроса необходимо использовать Close с параметром:

TVariant d;

d=(TVariant)wdDoNotSaveChanges;

WordDocument1->Close(&d);

При значении параметра wdSaveChanges запрос сохранится.Следующий код закрывает все открытые документы (без запроса на их сохранение):

TVariant d;

int n, i;

d=(TVariant)wdDoNotSaveChanges;

n=WordApplication1->Documents->Count;

for (i=1; i<=n; i++)

{ a=(TVariant) i;

WordApplication1->Documents->Item(&a)->Close(&d);

}

Работа с объектом WordFont1

Присоединение к объекту Selection можно выполнить так:

WordFont1->ConnectTo(WordApplication1->Selection->Font);


После установления связи с фрагментом текста можно задавать различные параметры. Например:

  • Выбрать шрифт

WordFont1->set_Name(TVariant(“Times New Roman”));

  • Установить размера

WordFont1->set_Size(18);

  • Жирность

WordFont1->set_Bold(true);

  • Подчеркивание

WordFont1->set_Underline(wdUnderlineSingle);

Различные виды подчеркивания задают специальные константы (вместо имен можно использовать числовые константы):

  • wdUnderlineNone = 0 – без подчеркивания,

  • wdUnderlineSingle = 1 – одинарное;

  • wdUnderlineDouble = 3 – двойное подчеркивание,

  • wdUnderlineDotted = 4 – точечное;

  • wdUnderlineDash = 7 - пунктирное,

  • wdUnderlineDotDash = 9 – штрих-пунктир,

  • wdUnderlineWords = 2 – подчеркнуть слова и т.д.

Цвет символов можно установить так:

WordFont1->set_ColorIndex(wdRed);

Цвет можно задать следующими константами: wdAuto = 0, wdBlack = 1, wdBlue = 2, wdTurquoise = 3, wdBrightGreen = 4, wdPink = 5, wdRed = 6, wdYellow = 7, wdWhite = 8, wdDarkBlue = 9 и т.д.

В Builder C++ 5.0 значения свойств задаются без использования методов set_…(). Например,

WordFont1->Underline=wdUnderlineSingle;

WordFont1->Bold=true; WordFont1->Bold=1;

Работа с объектом WordParagraphFormat

Присоединение к объекту Selection->ParagraphFormat

WordParagraphFormat1->ConnectTo(WordApplication1->Selection-> ParagraphFormat);

Компонент WordParagraphFormat помогает легко задать свойства, отвечающие за оформление текста. Следующие примеры позволяют понять как это делается.

Межстрочный интервал

WordParagraphFormat1->set_LineSpacingRule(wdLineSpaceSingle);

Следующие константы задают значения одинарного, полуторного и двойного интервала между строками:

  • wdLineSpaceSingle = 0,

  • wdLineSpace1pt5 = 1,

  • wdLineSpaceDouble=2.

Выравнивание

WordParagraphFormat1->set_Alignment(wdAlignParagraphLeft);

Следующие константы задают:

  • wdAlignParagraphLeft = 0 – выравнивание по левому краю,

  • wdAlignParagraphCenter = 1 – по центру,

  • wdAlignParagraphRight = 2- по правому краю,

  • wdAlignParagraphJustify = 3 – по ширине.

Отступ

  • Отступ первой строки

WordParagraphFormat1->set_FirstLineIndent(36.0);

  • Отступ перед абзацем

WordParagraphFormat1->set_SpaceBefore(0);

  • Отступ после абзаца

WordParagraphFormat1->set_SpaceAfter(12);

Установить стиль абзаца

Например оформим фрагмент текста как заголовок первого уровня (стиль “Заголовок1”):

WordParagraphFormat1->set_Style(TVariant(“Заголовок 1”));

Просмотр и сохранение документов

Просмотр общей информации о документе:

WordApplication1->Dialogs->Item(wdDialogFileSummaryInfo)-> Show(TVariant(30000));

Сохранение документа пользователем

WordApplication1->Dialogs->Item(wdDialogFileSaveAs)->Show(EmptyParam);

Следующий код обращается к диалоговому окну Word «Сохранить как…», оставляя приложение Word невидимым для пользователя. Если пользователь сохраняет документ, его имя появляется в строке Label1.

WordApplication1 -> set_Visible(false);

if (WordApplication1 -> Dialogs->Item(wdDialogFileSaveAs)->

Show(EmptyParam ) == -1)

{

Label1->Caption= WordDocument1 -> Name;


Случайные файлы

Файл
85861.rtf
tehnmul.doc
58880.rtf
11965-1.rtf
17271-1.rtf




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.