Главная
Новости, анонсы ...


 Опыты
Статьи, исходники
и прочее





Чернопятов Е.А. Автоматизация приложений MS Office. Часть 2.

Подравняем?

Мы научились выводить текст на страницу. Это неплохо, но для полного счастья не хватает, чтобы этот текст был форматированным. Этим мы сейчас и займемся. Определим константы, необходимые для задания типов выравнивания, и вставки разрыва (соответственно, разрыва страницы и секции)

typedef enum {
        wdAlignParagraphLeft = 0,
        wdAlignParagraphCenter = 1,
        wdAlignParagraphRight = 2,
        wdAlignParagraphJustify = 3,
        wdAlignParagraphDistribute = 4,
        wdAlignParagraphJustifyMed = 5,
        wdAlignParagraphJustifyHi = 7,
        wdAlignParagraphJustifyLow = 8
    } WdParagraphAlignment;

Для изменения выравнивания текста у текущего выделения есть метод void SetAlignment(long nNewValue), в качестве параметра которому передается требуемое выравнивание.

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

В продолжение предыдущего шага пишем:

        
oPar.SetAlignment(wdAlignParagraphCenter);	
oSel.TypeText("Этот текст будет выровнен по центру\n");
oPar.SetAlignment(wdAlignParagraphRight );	
oSel.TypeText("Этот текст будет выровнен по правому краю\n");
oPar.SetAlignment(wdAlignParagraphLeft );	
oSel.TypeText("Этот текст будет выровнен по левому краю\n");
oPar.SetAlignment(wdAlignParagraphJustify );	
oSel.TypeText("Этот текст будет выровнен по обоим краям\n");

Теперь поменяем начертание шрифта. Для этого можно использовать методы BoldRun() и ItalicRun(), принадлежащие Selection :

	
oSel.BoldRun();	
oSel.TypeText("Этот текст будет жирным\n");
oSel.ItalicRun();
oSel.TypeText("Этот текст будет наклонным\n");

Для того, чтобы отключить изменение начертания, достаточно просто вызвать соответствующий метод еще раз (совсем как когда мы нажимаем/отжимаем кнопки 241_1.gif (153 b) и 241_2.gif (143 b)).

Вставим в документ разрыв страницы. Это будет немного сложнее, поскольку метод InsertBreak требует в качестве параметра переменную типа COleVariant. Но мы можем воспользоваться простым конструктором с параметром для преобразования наших констант в требуемый тип:

	
typedef enum {
    wdSectionBreakNextPage = 2,
    wdSectionBreakContinuous = 3,
    wdSectionBreakEvenPage = 4,
    wdSectionBreakOddPage = 5,
    wdLineBreak = 6,
    wdPageBreak = 7,
    wdColumnBreak = 8,
    wdLineBreakClearLeft = 9,
    wdLineBreakClearRight = 10,
    wdTextWrappingBreak = 11
} WdBreakType;

COleVariant сovBreakType((long)wdPageBreak); 
// вставить разрыв страницы
oSel.InsertBreak(covBreakType);

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

	
_Font fnt; 
// получить параметры шрифта выделения
fnt=oSel.GetFont(); 
// сделать шрифт полужирным
fnt.SetBold(1);                      
// изменить имя шрифта
fnt.SetName("Arial");
// изменить размер шрифта 
fnt.SetSize(24);
oSel.TypeText("Этот текст будет полужирным семейства Arial, размером 24.");

Отмечу, что для снятия атрибутов шрифта достаточно вызвать соответствующий метод с параметром 0, например:

// снять атрибут полужирности
fnt.SetBold(0);

Добавляем красоты

В настоящее время редкий документ обходится без картинок. Не будем и мы лишать себя удовольствия немного разнообразить скучный текст.

Для начала добавим две переменных типа COleVariant с начальными значениями TRUE и FALSE.

	
COleVariant
	covTrue((short)TRUE),
	covFalse((short)FALSE);

Теперь точно также, как раньше, добавляем 2 класса, которые отвечают за "внедренные фигуры". Первый класс, как обычно, коллекция, второй - одиночная фигура.

	
InlineShapes oShps;
InlineShape oShp;

Получаем текущюю коллекцию, и добавляем в нее новую фигуру. Для этого используем метод LPDISPATCH AddPicture(LPCTSTR FileName, VARIANT* LinkToFile, VARIANT* SaveWithDocument, VARIANT* Range);. Обратите внимание на параметры. Первый - это местоположение вставляемой картинки на диске, второй - вставлять картинку в текст как она есть на момент вставки или установить связь с картинкой таким образом, чтобы при изменении изображения оно обновлялось и в документе. Третий параметр - сохранять ли картинку внутри документа. Последний параметр мы игнорируем. Эти параметры похожи на те, которые мы настраиваем в Word-e:

	
//добавим параграф
oSel.TypeParagraph();	
oShps = oSel.GetInlineShapes();
oShp = oShps.AddPicture("d:\\winnt\\Rhododendron.bmp",covFalse,covTrue,covOptional);

Естественно, на Вашей машине путь к картинке будет другим :)

Мы можем изменять параметры нашей картинки, например, ее ширину и высоту. Например, увеличим размер вставленной картинки в 1.5 раза.

float width = oShp.GetWidth();
float height = oShp.GetHeight();
oShp.SetWidth(width*1.5);
oShp.SetHeight(height*1.5);

Сохранение

Если попытаться закрыть наш красивый документ, то выяснится, что имя-то мы ему не задали, и автоматически не сохранили. Пользователю приходится самому придумывать, куда записывать и какое имя давать отчету. Давайте избавим пользователя от лишних вопросов. Для этого у нас есть функция... правильно, void SaveAs(VARIANT* FileName, VARIANT* FileFormat, VARIANT* LockComments, VARIANT* Password, VARIANT* AddToRecentFiles, VARIANT* WritePassword, VARIANT* ReadOnlyRecommended, VARIANT* EmbedTrueTypeFonts, VARIANT* SaveNativePictureFormat, VARIANT* SaveFormsData, VARIANT* SaveAsAOCELetter);, опять-таки со множеством параметров. Можно настроить все, что угодно, включая пароль.

_Document oActiveDoc; 
oActiveDoc = app.GetActiveDocument();
oActiveDoc.SaveAs(COleVariant("c:\\doc1.doc"), 
COleVariant((short)0),
covFalse, COleVariant(""), covTrue, COleVariant(""),
covFalse, covFalse, covFalse, covFalse, covFalse);



Предыдущая часть| Следующая часть | Оглавление

Последние изменения от 09.08.2013




e-mail:  Yegor A. Blackheel

Поиск по сайту с помощью Yandex

 www.guestbook.ru - лучший сервер гостевых книг