- •Часть 2. Работа с ole-сервером Word.
- •2.1 Получение доступа к интерфейсу Application для Word.
- •2.2 Интерфейсы и константы
- •2.3 Создание рабочего документа
- •2.3.1 Вывод текстовой информации.
- •2.3.2 Изменение параметров документа.
- •2.4 Работа с таблицами.
- •2.5 Текст кода программы.
- •2.6 Работа с диаграммами.
- •2.6.1 Копирование диаграммы из рабочей книги Excel.
- •2.7 Некоторые другие возможности.
2.3.1 Вывод текстовой информации.
На первом этапе выводим текст. Пусть на данном этапе необходимо вывести следующее.
Рис 2.2 Вывод текстовой информации.
В обработчике нажатия первой кнопки начнем формировать код программы.
Создаем Объект Word.Application.
Variant v;
if(!fStart)
{
try
{
vVarApp=CreateOleObject("Word.Application");
fStart=true;
}
catch(...)
{
MessageBox(0, "Ошибка при открытии сервера Word",
"Ошибка", MB_OK);
return;
}
}
О использовании try catch мы также уже говорили в Ч 1. п 1.3.
Сделаем приложение видимым.
vVarApp.OlePropertySet("Visible",true);
Переменной vVarDocs присваивается значение Documents - свойство объекта Word.Application, содержащее набор рабочих документов.
vVarDocs=vVarApp.OlePropertyGet("Documents");
Добавляем созданный документ в приложение - для этого надо выполнить вызов, прототип которого:
vVarDocs.OleProcedure("Add","Template", NewTemplate, DocumentType);
Пре NewTemplate true создается шаблон при false - документ.
Правильно для конретной версии Word создание документа записать как:
vVarDocs.OleProcedure("Add",
"C:\\WINDOWS\\Application Data\\Microsoft\\Шаблоны\\Normal.dot",
false,0);
Посколько расположение шаблонов хранится для всех установленных типов документов в реестре, то для создания простого документа можно использовать установки по умолчанию и достаточно записать:
vVarDocs.OleProcedure("Add");
Этот вызов можно повторить столько раз сколько будет создано рабочих документов. Следует обратить внимание, что обратиться к документу после его создания можно по свойству Item следующим образом:
vVarDoc=vVarDocs.OleFunction("Item",n);
Здесь n=1 соответствует последнему созданному документу, n-1 предпоследнему, и. т.д.
Создаем, например 2 документа:
vVarDocs.OleProcedure("Add");
vVarDocs.OleProcedure("Add");
Проверяем, что создано два документа:
if(vVarDocs.OlePropertyGet("Count") != 2)
{
MessageBox(0, "Ошибка при создании документов",
"Ошибка", MB_OK);
return;
}
Будем работать с первым документом, как ни странно его Item = 2:
vVarDoc=vVarDocs.OleFunction("Item",2);
Смотреть будем тоже на первый документ - т.е. активируем его:
vVarDoc.OleProcedure("Activate");
Получаем свойство Paragraphs объекта документ:
vVarParagraphs=vVarDoc.OlePropertyGet("Paragraphs");
Задаем текст для вывода:
str="\t\tОзнакомлен\t\t";
Добавляем параграф:
vVarParagraphs.OleProcedure("Add");
Работаем с первым параграфом:
vVarParagraph=vVarParagraphs.OleFunction("Item",1);
Заносим в него текст:
vVarParagraph.OlePropertyGet("Range").
OlePropertySet("Text",str.c_str());
Выравниваем по правому краю (wdAlignParagraphRight - по правому краю), по причинам описанным выше используем константы вместо имен переменных:
vVarParagraph.OlePropertySet("Alignment",2);
Аналогично выводим следующие параграфы, в том числе и пустые:
str="Директор\t\t=Пупкин=";
vVarParagraphs.OleProcedure("Add");
vVarParagraph=vVarParagraphs.OleFunction("Item",2);
vVarParagraph.OlePropertyGet("Range").
OlePropertySet("Text",str.c_str());
vVarParagraph.OlePropertySet("Alignment",2);
vVarParagraphs.OleProcedure("Add");
str="\"....\"...........................2003г.";
vVarParagraphs.OleProcedure("Add");
vVarParagraph=vVarParagraphs.OleFunction("Item",4);
vVarParagraph.OlePropertyGet("Range").
OlePropertySet("Text",str.c_str());
vVarParagraph.OlePropertySet("Alignment",2);
vVarParagraphs.OleProcedure("Add");
str="Итоги работы за неделю.";
vVarParagraphs.OleProcedure("Add");
vVarParagraph=vVarParagraphs.OleFunction("Item",6);
vVarParagraph.OlePropertyGet("Range").
OlePropertySet("Text",str.c_str());
vVarParagraph.OlePropertySet("Alignment",1);
Константы выравнивания текста:
wdAlignParagraphLeft = 0;
wdAlignParagraphCenter = 1;
wdAlignParagraphRight = 2;
wdAlignParagraphJustify = 3;
wdAlignParagraphDistribute = 4;
wdAlignParagraphJustifyMed = 5;
wdAlignParagraphJustifyHi = 7;
wdAlignParagraphJustifyLow = 8.
Результат с достоинствами и недостатками видим на рисунке. Видно, что фон белый, шрифт не такой как хотельсь бы, включена линейка, проверка орфографии и т.п.
