Дата публикации статьи: 25.02.2004 20:37

Валерий Назаров
Работа с Word. Статья пятая
Работа с таблицами в Word (часть 2)

При работе с таблицами часто возникает необходимость изменить вид ячеек, объединить их между собой. Это позволяет визуально распределить вводимую информацию в таблице, а также улучшить внешний вид в целом (естественно при продуманном применении данной возможности).

Однако нужно помнить и о "подводных камнях" при использовании данного кода в программировании. Основное что нужно помнить, это то что при объединении ячеек одна ячейка как бы "поглащает" другую ячейку (или ячейки). При этом не только изменится общее количество ячеек (уменьшится), но и "поглащенные" ячейки как бы перестанут существовать. Поэтому при обращении к "поглащенной" ячейке произойдёт ошибка.
Например: при объединении ячейки 1,2 с ячейкой 1,1 останется ячейка 1,1 , а ячейка 1,2 перестанет существовать. При объединении ячеек 1,1; 2,1; 3,1 в итоге останется только ячейка 1,1.

 'объеденяем ячейку 1,1 с ячейкой 1,2
TableWord.Cell(1, 1).Merge TableWord.Cell(2, 1)

'объеденяем ячейку 4,2 с ячейкой 4,1
TableWord.Cell(4, 2).Merge TableWord.Cell(4, 1)

По умолчанию (при создании таблицы) толщина линий, разделяющая ячейки, строки и столбцы одинакова, и зависит от настроек Word-a. Для изменения толщины линий вы можете воспользоваться данным кодом:

'делаем верхнюю линию (границу) ячейки толщиной 6 пт
TableWord.Cell(5, 1).Borders(wdBorderTop).LineWidth = wdLineWidth600pt

'делаем слева линию (границу) ячейки толщиной 3 пт
TableWord.Cell(6, 1).Borders(wdBorderLeft).LineWidth = wdLineWidth300pt

'делаем нижнюю линию (границу) ячейки толщиной 2,25 пт
TableWord.Cell(7, 1).Borders(wdBorderBottom).LineWidth = wdLineWidth225pt

'делаем справа линию (границу) ячейки толщиной 3 пт
TableWord.Cell(8, 1).Borders(wdBorderRight).LineWidth = wdLineWidth300pt 

В ходе работы с таблицей вам может понадобиться разукрасить линии разным цветом для придания более красочного вида таблице. Для этого вы можете воспользоваться разными программными кодами.

В первом примере кода мы используем встроенные константы для определения цвета линии. Синтаксис можно вольно перевести так:
<объект_ТАБЛИЦА>.<ЯЧЕЙКА>(номер_строки, номер_столбца).<ГРАНИЦЫ>(верхняя_граница).<ЦВЕТ> = <константа_ЦВЕТ_СИНИЙ>
После знака равно вы можете подставить любую встроенную цветовую константу VB.

'делаем цвет верхней линии (границы) ячейки синим
TableWord.Cell(9, 1).Borders(wdBorderTop).Color = wdColorBlue
	Если среди встроенных цветовых констант вам не удалось найти нужного вам цвета, то вы всегда можете воспользоваться функцией RGB и задать необходимый вам цвет в цифровом коде.

'делаем цвет верхней линии (границы) ячейки произвольным
TableWord.Cell(10, 1).Borders(wdBorderTop).Color = RGB(100, 200, 50)

Кроме толщины и цвета линий вы можете оформить таблицу разными стилями линий. В Word встроено множество стилей оформления линий. Рассмотрим большинство из них (вы всегда можете поэкспериментировать с другими константами).

'изменим стиль линий используя разные константы
TableWord.Cell(6, 2).Borders(wdBorderTop).LineStyle = wdLineStyleDashDotDot
TableWord.Cell(7, 2).Borders(wdBorderTop).LineStyle = wdLineStyleDashDotStroked
TableWord.Cell(8, 2).Borders(wdBorderTop).LineStyle = wdLineStyleDashLargeGap
TableWord.Cell(9, 2).Borders(wdBorderTop).LineStyle = wdLineStyleDashSmallGap
TableWord.Cell(10, 2).Borders(wdBorderTop).LineStyle = wdLineStyleDot
TableWord.Cell(11, 2).Borders(wdBorderTop).LineStyle = wdLineStyleDouble
TableWord.Cell(12, 2).Borders(wdBorderTop).LineStyle = wdLineStyleDoubleWavy
TableWord.Cell(13, 2).Borders(wdBorderTop).LineStyle = wdLineStyleEmboss3D
TableWord.Cell(14, 2).Borders(wdBorderTop).LineStyle = wdLineStyleEngrave3D
'Невидимая при печати линия
TableWord.Cell(15, 2).Borders(wdBorderTop).LineStyle = wdLineStyleNone
TableWord.Cell(16, 2).Borders(wdBorderTop).LineStyle = wdLineStyleSingleWavy
TableWord.Cell(17, 2).Borders(wdBorderTop).LineStyle = wdLineStyleThickThinLargeGap
TableWord.Cell(18, 2).Borders(wdBorderTop).LineStyle = wdLineStyleThickThinMedGap
TableWord.Cell(19, 2).Borders(wdBorderTop).LineStyle = wdLineStyleThickThinSmallGap
TableWord.Cell(20, 2).Borders(wdBorderTop).LineStyle = wdLineStyleTriple

После того как вы измените стиль линии, вы можете изменять цвет и толщину, как это было показано в коде выше.
При работе с таблицами, уже после её создания вам может не хватить строк, столбцов или ячеек для ввода информации. Тогда вам будет необходимо динамически добавить нужное количество элементов в таблицу. В принципе это не сложно, за исключением некоторых оговорок. Напрямую объект Tables не поддерживает динамическое добавление элементов. Но от лома нет приёма, если нет другого лома. Поэтому добавлять элементы к таблице мы будем через другие объекты. Смысл этого приёма состоит в том, что объекты Word.Application и его "дочерний объект " Word.Document позволяют производить такие действия над своими потомками, которые сами эти объекты не поддерживают. Мы должны для начала выбрать необходимый нам для работы элемент "дочернего" объекта, а уже после этого произвести необходимые действия через объект - "родитель". Но необходимо помнить и о "подводных камнях" данного приёма. Конкретно для таблиц это значит, что как я уже упоминал выше, при объединении строк происходит "поглощение" ячеек. Из этого следует, что если вы попытаетесь выбрать столбец или строку которые содержат "поглощённые" ячейки, то вызовете ошибку. Если вы выберете ячейку ("нормальную"), то вы избежите предыдущую ошибку, но так как добавляемые столбцы и строки наследуют свойства строки и столбца родителя вы получите результат, который вам не понравиться. Ведь столбец потомок наследует объединенную строку и её формат, при этом ячейка "вылезет" за границы таблицы. Из этого следует, что желательно добавлять такие строки и столбцы, родители которых не имеют объединенных ячеек, строк и столбцов. Перейдём к коду.

 'Выделяем (выбираем) 1-ю строку
'TableWord.Rows(1).Select
'Выделяем (выбираем) 1-й столбец
'TableWord.Columns(1).Select

'Выделяем (выбираем) ячейку
TableWord.Cell(20, 2).Select

'добавляем столбец справа от выбранного
DocWord.Application.Selection.InsertColumnsRight
'или WordApp.Selection.InsertColumnsRight

'добавляем столбец слева от выбранного
DocWord.Application.Selection.InsertColumns
'или WordApp.Selection.InsertColumns

'Выделяем (выбираем) ячейку
TableWord.Cell(20, 2).Select

'добавляем строку выше (как параметр можно указать сколько строк вставить)
DocWord.Application.Selection.InsertRowsAbove 2

'добавляем строку ниже (как параметр можно указать сколько строк вставить)
DocWord.Application.Selection.InsertRowsBelow 2

'Выделяем (выбираем) ячейку
TableWord.Cell(24, 2).Select

'вставим ячейку (c применением параметров)
' 3 - вставить целый столбец
' 2 - вставить целую строку
' 1 - вставить со смещением вниз
' 0 - вставить со смещением вправо
DocWord.Application.Selection.InsertCells (3)

Продолжение следует.
Пример: Word_5.vbp