5. Работа с сервером Word (548353)
Текст из файла
Работа с сервером 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;
}
Программное сохранение и открытие документов
Сохранить документ можно так:
TVariant FileName= "F:\\Work\\fff.doc" ;
WordDocument1 -> SaveAs(&FileName);
Для того, чтобы открыть документ используется метод Open коллекции Documents:
WordApplication1 -> Documents -> Open(TVariant("F:\\Work\\ddd.doc"));
Режим предварительного просмотра:
WordDocument1 -> PrintPreview();
Задание
-
В текстовом редакторе MS Word создать документ и внести в него три абзаца любого текста. В каждом абзаце минимум по три строки. Сохранить текст в отдельной папке.
-
В среде Builder C++ разработать приложение для управления Word – сервером и передачи информации в его документы. Операции для связи с сервером могут быть оформлены в виде команд меню или в виде кнопок на форме приложения. Кроме меню и кнопок на форму следует поместить три компонента TLabel (“Фамилия”, “Группа”, “Группа”), три компонента для ввода текста TEdit и компонент TImage.
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.