Предварительная настройка страницы WORD
Одной из самых распространенных проблем работы с Ole WORD - различные настройки конфигурации у разных версий WORD и на разных машинах, вследствие чего иногда документ воспроизводится некорректно. Эту проблему можно решить, задав параметры конфигурации страницы вручную. Среди таких настроек отдельно можно выделить возможности корректировки отступов справа, слева, сверху и снизу, а также ряд других параметров.
procedure Word.Normalize;
begin
WordApplication1.ActiveDocument.PageSetup.TopMargin := 1.5*28;
WordApplication1.ActiveDocument.PageSetup.BottomMargin := 1.5*28;
WordApplication1.ActiveDocument.PageSetup.LeftMargin := 3*28;
WordApplication1.ActiveDocument.PageSetup.RightMargin := 1*28;
WordApplication1.ActiveDocument.PageSetup.Gutter := 0;
WordApplication1.ActiveDocument.PageSetup.HeaderDistance:= 1.27*28;
WordApplication1.ActiveDocument.PageSetup.FooterDistance := 1.27*28;
end;
Поскольку каждое обращение к серверу занимает время, то слишком объемное конфигурирование системы может привести к тому, что пользователь подумает, что программа, должно быть, зависла и перезагрузится, не дав выполнить всё конфигурирование целиком. Поэтому можно посоветовать ввести эту возможность как полезную утилиту программы типа: Full Correction.
Полезные утилиты
Вообще-то всего описанного выше вполне достаточно для работы, однако мы напишем ещё несколько полезных функций.
Закрыть WORD:
procedure Word.Quit;
begin
WordApplication1.Quit;
end;
Закрыть документ WORD:
procedure Word.Close;
begin
WordApplication1.Documents.Close;
end;
Сохранить активный документ:
procedure Word.Save(Name:string);
begin
WordApplication1.ActiveDocument.SaveAs(FileName:=Name);
end;
Отправка активного документа на печать:
procedure Word.Print;
begin
WordApplication1.ActiveDocument.Print;
end;
Разрыв страницы - переход к новой странице. Реализуется так:
WordApplication1.Selection.InsertBreak;
ЛАБОРАТОРНОЕ ЗАДАНИЕ
И МЕТОДИЧЕСКИЕ УКАЗАНИЯ
ПО ЕГО ВЫПОЛНЕНИЮ
4.1. Лабораторное задание:
Написать программу, которая открывает Word, создает в нем документ, заполняет его данными, которые вводит пользователь, и изменяет параметры документа.
УКАЗАНИЯ ПО ОФОРМЛЕНИЮ ОТЧЕТА
И КОНТРОЛЬНЫЕ ВОПРОСЫ
Отчет по лабораторной работе должен содержать
1. Наименование.
2. Цель работы.
3. Используемое оборудование.
4. Теоретическая часть.
5. Распечатка программного кода вашей программы.
6. Выводы по проделанной работе
Контрольные вопросы
1. Назовите значения свойства ConnectKind компонента WordApplication.
2. Назовите подходы для создания отчетов в Word.
3. Зачем нужна функция AutoConnect?
4. Какой функцией закрывается Word.
5. Как запускаются макросы, написанные в Word.
Лабораторная работа № 4
Построение таблиц с использованием MS Word
Общее описание работы
1.1. Цель работы: состоит в изучении принципов создания таблиц в программе Word.
Содержание работы
Лабораторная работа состоит из домашнего и лабораторного заданий. Домашнее задание заключается в изучении принципов построения таблиц в программе Word. Лабораторное задание включает написание программы на языке Delphi с выполнением всех изученных в домашнем задании данных.
Используемое оборудование
Для выполнения лабораторной работы используются программно-аппаратные средства: ПЭВМ класса Pentium стандартной конфигурации, цветной монитор с графическим адаптером VGA и выше, объем оперативной памяти не менее 64 Мб, ОС Windows 98 и выше, не менее 40 Mb свободного объема на жестком диске.
Домашнее задание и методические указания по его выполнению
По методическому руководству ознакомиться с принципами построения таблиц в Microsoft Word с помощью языка программирования Delphi 6.
ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
Работа с таблицами в Word
Далее будут рассмотрены вопросы программной работы с таблицами документа Word. Тут могут быть два пути. Первый - если заранее известна структура данных отчета, можно приготовить шаблон, куда в ячейки таблицы затем просто занесем нужные данные. И второй - создание отчета с нуля, создание в документе таблицы, заполнение ее. При этом можно программно добавить или удалить строки и столбцы, объединить или разбить ячейки - почти все, что мы делаем в самом Word'e. Все, что понадобится – компоненты WordApplication и WordDocument с палитры Servers.
Таблицы в документе Word образуют коллекцию Tables. Их количество можно узнать так:
tcount:=WordDocument1.Tables.Count;
к отдельной таблице обращаемся по ее номеру:
i:=1;
WordDocument1.Tables.Item(i) ...,
где i - целое число. В данном случае мы обращаемся к первой таблице, а вообще i может принимать значения от 1 до WordDocument1.Tables.Count. Если нам необходимо создать таблицу самим, следует поступить так:
WordApplication1.ActiveDocument.Tables.Add(WordApplication1 .Selection.Range,i,j);
Эта таблица - единственное, что будет в документе, так как она заменяет собой указанный в числе параметров объект Range. В данном случае получаем таблицу на i строк и j столбцов. Если уже еcть какой-то текст, который надо сохранить, то в начале снимаем с него выделение и только затем вставляем таблицу:
Direction:=0;
WordApplication1.Selection.Collapse(Direction);
WordApplicаtion1.ActiveDocument.Tables.Add(WordApplication1. Selection.Range,1,7);
Ну вот, теперь у нас есть таблица. Неважно, содержалась она уже в документе или мы создали ее сами. Посмотрим, что же мы с ней можем сделать. Число столбцов и строк узнаем так:
i:=1;
k:=WordDocument1.Tables.Item(i).Columns.Count;
j:=WordDocument1.Tables.Item(i).Rows.Count;
Здесь мы опять обратились к первой таблице, но можем работать с любой - надо только правильно указать ее номер. Теперь изменим ширину столбцов или высоту строк:
WordDocument1.Tables.Item(i).Columns.Width:=90;
WordDocument1.Tables.Item(i).Rows.Height:=45;
Аналогично можем задавать размеры отдельных строк и столбцов:
WordDocument1.Tables.Item(i).Columns.Item(j).Width:=90;
WordDocument1.Tables.Item(i).Rows.Item(j).Height:=45;
Здесь j - целое число, начинается от 1. Можем обратиться к отдельной ячейке, прочитать или изменить содержащийся в ней текст:
WordDocument1.Tables.Item(i).Cell(j,k).Range.Text;
Здесь j и k целые переменные, изменяются от 1 до числа строк или столбцов соответственно. Присвоив данной величине строковое выражение, увидим, что оно появилось в ячейке (j,k). Несколько непривычно, но в таблицах Word на первом месте стоит именно номер строки. Можем также задать программно отступы от края ячеек, как для всей таблицы сразу, так и для отдельной ячейки:
WordDocument1.Tables.Item(i).TopPadding:=10;
WordDocument1.Tables.Item(i).BottomPadding:=10;
WordDocument1.Tables.Item(i).RightPadding:=10;
WordDocument1.Tables.Item(i).LeftPadding:=10;
В данном случае мы задали одинаковые отступы для всей таблицы, но аналогичные четыре свойства есть и у отдельной ячейки. Выделить нужную ячейку, столбец или строку можем следующим образом:
WordDocument1.Tables.Item(i).Cell(j,k).Select;
WordDocument1.Tables.Item(i).Columns.Item(j).Select;
WordDocument1.Tables.Item(i).Rows.Item(j).Select;
Кроме того, можем подогнать размеры ячеек по содержимому. Для этого вызываем метод AutoFit:
WordDocument1.Tables.Item(i).Columns.AutoFit;
Добавить строку или столбец также не представляет сложностей:
WordDocument1.Tables.Item(i).Columns.Add(EmptyParam);
WordDocument1.Tables.Item(i).Rows.Add(EmptyParam);
Мы добавили строку внизу и столбец справа. Теперь вставим столбец в определенном месте таблицы:
var i, j: Integer;
varcol: OleVariant;
...
j:=2;
varcol:=WordDocument1.Tables.Item(i).Columns.Item(j);
WordDocument1.Tables.Item(i).Columns.Add(varcol);
Совершенно аналогично поступаем и со строками. Вообще в скобках указаны строка или столбец, перед которыми происходит вставка. Однако явно указать в скобках почему-то нельзя, надо через переменную.
Теперь про объединение ячеек. Довольно просто:
WordDocment1.Tables.Item(i).Cell(j,k).Merge(WordDocument1.Tables. Item(i).Cell(j,k+1));
Мы объединили две соседние по горизонтали ячейки (j,k) и (j,k+1). При этом получается, что большая ячейка как бы имеет два "адреса". Аналогично надо действовать и при объединении по вертикали. Все точно так же, но с нумерацией ячеек после объединения двух соседних по вертикали начинается путаница, и при попытке заполнить таблицу возникают ошибки.
Теперь разобьем ячейки.
varrow:=1;
varcol:=2;
WordDocument1.Tables.Item(i).Cell(j,k).Split(varrow, varcol);
Здесь мы разбили ячейку (j,k) на две по горизонтали. Переменные varcol и varrow типа OleVariant это количество столбцов и строк, на которые разбивается данная ячейка. Здесь снова с нумерацией начинается чехарда, так что этот вопрос разбиения и объединения ячеек представляет скорее чисто теоретический интерес. В таких случаях лучше заранее приготовить шаблоны.
Теперь для примера удалим из таблицы второй столбец или третью строку:
WordDocument1.Tables.Item(i).Columns.Item(2).Delete;
WordDocument1.Tables.Item(i).Rows.Item(3).Delete;
Внешний вид таблицы
Простейшая таблица, конечно, смотрится не очень. Теперь посмотрим, как мы можем ее приукрасить. При желании все сделать посимпатичнее можем использовать текстуру. Выглядеть это будет так:
WordDocument1.Tables.Item(i).Cell(j,k).Shading.Texture:=wdTexture20Percent;
Совершенно аналогично можем сделать текстуру в целом столбце или строке:
WordDocument1.Tables.Item(i).Columns.Item(j).Shading.Texture:=wdTexture20Percent;
WordDocument1.Tables.Item(i).Rows.Item(j).Shading.Texture:=wdTexture20Percent;
Текстура задается шестнадцатеричной константой, список констант можно найти заголовочном файле Word2000.pas. Можно их использовать как в шестнадцатеричном, так и в символьном виде. Чтобы не загромождать материал, значения констант будут выноситься в "Приложение" в конце статьи. Сразу оговорюсь, что заливка будет черно-белая или в шкале серого. Заливку определенным цветом пока так и не удалось обнаружить. Самая первая константа означает отсутствие заливки. Ее можно использовать, чтобы отменить текстуру.
Чтобы выделить что-нибудь важное, можем изменить шрифт текста в определенной ячейке. Для этого воспользуемся свойствами объекта Selection:
WordDocument1.Tables.Item(i).Cell(1,2).Select;
WordApplication1.Selection.Font.Color:=clRed;
WordApplication1.Selection.Font.Italic:=1;
WordApplication1.Selection.Font.Size:=16;
В данном примере мы сделали цвет текста в ячейке (1,2) красным, выделили его курсивом и изменили размер на 16. Кроме того, можем сделать шрифт подчеркнутым, перечеркнутым и т.п. (Точно также можно менять шрифт в любом выделенном фрагменте текста).
Еще один способ изменить внешний вид таблицы - использовать стилевые шаблоны Word'a. У таблицы имеется метод AutoFormat, который меняет внешний вид таблицы в соответствии с некими предопределенными стилями. В заголовочном файле он описан следующим образом:
procedure AutoFormat(
var Format: OleVariant;
var ApplyBorders: OleVariant;
var ApplyShading: OleVariant;
var ApplyFont: OleVariant;
var ApplyColor: OleVariant;
var ApplyHeadingRows: OleVariant;
var ApplyLastRow: OleVariant;
var ApplyFirstColumn: OleVariant;
var ApplyLastColumn: OleVariant;
var AutoFit: OleVariant
);
Первый параметр представляет из себя собственно константу, задающую стиль, а остальные показывают, будут ли требования нового стиля применяться конкретно к границам, тени, шрифту, цвету, первой строке, последней строке, первому столбцу и последнему столбцу. Последний параметр в списке указывает, надо ли подгонять размер ячеек по их содержимому - лучше самому потом вызвать AutoFit.
Как показала практика, работают только два первых параметра. Все остальные заменяем "пустышками". То есть это скорее будет просто способ изменения стиля границ, но и на том спасибо. Некоторые стили таблиц даны в приложении, полный же список ищите в заголовочном файле. Вместо второго параметра ставим вариантную переменную, которой присваиваем wdTableFormatApplyBorders. То есть на практике это выглядит так:
var tformat, tappbrd: OleVariant;
...
tformat:=wdTableFormatWeb3;
tappbrd:=wdTableFormatApplyBorders;
i:=1;
WordDocument1.Tables.Item(i).AutoFormat(tformat, tappbrd, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
ЛАБОРАТОРНОЕ ЗАДАНИЕ
И МЕТОДИЧЕСКИЕ УКАЗАНИЯ
ПО ЕГО ВЫПОЛНЕНИЮ
4.1. Лабораторное задание:
Согласно варианту задания, полученному при выполнении лабораторной работы № 1, написать программу.