Из PHP в Excel: работа с COM-объектами : Рисование таблиц
Общие возможности:
В Excel при помощи PHP можно делать следующие операции с таблицами:Работа с таблицей:
Все свойства таблицы находятся в объекте Borders(). Вернее не в объекте, а в массиве объектов Borders[]. Каждый элемент этого массива отвечает за определенную часть таблицы (верхняя граница таблицы, нижняя, внутренние линии и т.д.). А уже у каждого элемента массива есть свои свойства, которые определяются только для данного объекта:Таким образом если мы хотим нарисовать табличку с жирным внешним бордюром синего цвета и тонкими внутренними линиями красного цвета, то должны выполнить следующий код:
<?php $xls = new COM("Excel.Application"); // Создаем новый COM-объект $xls->Application->Visible = 1; // Заставляем его отобразиться $xls->Workbooks->Add(); // Добавляем новый документ // Задаем область таблицы $range=$xls->Range("B2:E10"); // Выделяем ее $range->Select(); // Присваиваем переменной $range выделенный фрагмент $range=$xls->Selection(); // Задаем свойства левой стенки таблицы $rangeBordersLeft=$range->Borders("7"); $rangeBordersLeft->LineStyle = 1; $rangeBordersLeft->Weight = 3; $rangeBordersLeft->ColorIndex = 5; // Задаем свойства верхней стенки таблицы $rangeBordersTop=$range->Borders("8"); $rangeBordersTop->LineStyle = 1; $rangeBordersTop->Weight = 3; $rangeBordersTop->ColorIndex = 5; // Задаем свойства нижней стенки таблицы $rangeBordersBottom=$range->Borders("9"); $rangeBordersBottom->LineStyle = 1; $rangeBordersBottom->Weight = 3; $rangeBordersBottom->ColorIndex = 5; // Задаем свойства правой стенки таблицы $rangeBordersRight=$range->Borders("10"); $rangeBordersRight->LineStyle = 1; $rangeBordersRight->Weight = 3; $rangeBordersRight->ColorIndex = 5; // Задаем свойства внутренних вертикальных линий $rangeBordersVertical=$range->Borders("11"); $rangeBordersVertical->LineStyle = 1; $rangeBordersVertical->Weight = 2; $rangeBordersVertical->ColorIndex = 3; // Задаем свойства внутренних горизонтальных линий $rangeBordersHorizontal=$range->Borders("12"); $rangeBordersHorizontal->LineStyle = 1; $rangeBordersHorizontal->Weight = 2; $rangeBordersHorizontal->ColorIndex = 3; ?>Т.е. сначало берется левая стенка таблицы
$rangeBordersLeft=$range->Borders("7");Для нее задются: тип линии (сплошная),
$rangeBordersLeft->LineStyle = 1;толщина линии (жирная),
$rangeBordersLeft->Weight = 3;цвет линии (синий)
$rangeBordersLeft->ColorIndex = 5;Аналогично мы поступаем для правой, верхней, нижней стенок.
Для внутренних вертикальных линий
$rangeBordersVertical=$range->Borders("11");и внутренних горизонтальных линий
$rangeBordersHorizontal=$range->Borders("12");задаем тип линий - сплошная, толщина линий - обычная, цвет линий - красный:
$rangeBordersVertical->LineStyle = 1; $rangeBordersVertical->Weight = 2; $rangeBordersVertical->ColorIndex = 3;и
$rangeBordersHorizontal->LineStyle = 1; $rangeBordersHorizontal->Weight = 2; $rangeBordersHorizontal->ColorIndex = 3;Свойство LineStyle() (тип линии) может принимать значения от 1 до 13, а свойство Weight (толщина) может принимать значения от 1 до 4.
Как будут выглядеть линии при различных значениях свойств LineStyle и Weight показано в следующей таблице:
LineStyle | Weight = 1 | Weight = 2 | Weight = 3 | Weight = 4 |
LineStyle = 1 | ||||
LineStyle = 2 | ||||
LineStyle = 3 | ||||
LineStyle = 4 | ||||
LineStyle = 5 | ||||
LineStyle = 6 | ||||
LineStyle = 7 | ||||
LineStyle = 8 | ||||
LineStyle = 9 | ||||
LineStyle = 10 | ||||
LineStyle = 11 | ||||
LineStyle = 12 | ||||
LineStyle = 13 |
Пример формирования такой таблички в Excel при помощи PHP:
<?php $xls = new COM("Excel.Application"); // Создаем новый COM-объект $xls->Application->Visible = 1; // Заставляем его отобразиться $xls->Workbooks->Add(); // Добавляем новый документ // Задаем для всего диапазона: выравнивание по центру // размер шрифта: 8 // ширина колонок: 12 $range=$xls->Range("A1:E14"); $range->HorizontalAlignment = 3; $range->Font->Size = 8; $range->ColumnWidth = 12; // Формируем "шапку" $range=$xls->Range("A1"); $range->Font->Bold = true; $range->Value = "LineStyle"; $range=$xls->Range("B1"); $range->Font->Bold = true; $range->Value = "Weight = 1"; $range=$xls->Range("C1"); $range->Font->Bold = true; $range->Value = "Weight = 2"; $range=$xls->Range("D1"); $range->Font->Bold = true; $range->Value = "Weight = 3"; $range=$xls->Range("E1"); $range->Font->Bold = true; $range->Value = "Weight = 4"; // Для каждого столбца выводим нижний бордюр ячейки // с соответствующими значениями свойств LineStyle и Width for($i=1;$i<=13;$i++) { $range=$xls->Range("A".($i+1)); $range->Value = "LineStyle = $i"; $range=$xls->Range("B".($i+1)); $rangeBordersRight=$range->Borders("9"); $rangeBordersRight->LineStyle = $i; $rangeBordersRight->Weight = 1; }; for($i=1;$i<=13;$i++) { $range=$xls->Range("C".($i+1)); $rangeBordersRight=$range->Borders("9"); $rangeBordersRight->LineStyle = $i; $rangeBordersRight->Weight = 2; }; for($i=1;$i<=13;$i++) { $range=$xls->Range("D".($i+1)); $rangeBordersRight=$range->Borders("9"); $rangeBordersRight->LineStyle = $i; $rangeBordersRight->Weight = 3; }; for($i=1;$i<=13;$i++) { $range=$xls->Range("E".($i+1)); $rangeBordersRight=$range->Borders("9"); $rangeBordersRight->LineStyle = $i; $rangeBordersRight->Weight = 4; }; ?>Для закрепления материала рассмотрим как осуществить на PHP формирование границ таблицы на примере некоторых стандратных средств Excel.
Принцип действия: Удаляет в выбранном диапазоне все границы, рамки и т.д.
Как реализовать:
Код: <?php $xls = new COM("Excel.Application"); // Создаем новый COM-объект $xls->Application->Visible = 1; // Заставляем его отобразиться $xls->Workbooks->Add(); // Добавляем новый документ // Задаем область таблицы $range=$xls->Range("B2:E10"); // Выделяем ее $range->Select(); // Присваиваем переменной $range выделенный фрагмент $range=$xls->Selection(); // Задаем свойства для всей таблицы $rangeDiagonalDown=$range->Borders("5"); $rangeDiagonalDown->LineStyle = Null; $rangeDiagonalUp=$range->Borders("6"); $rangeDiagonalUp->LineStyle = Null; $rangeBordersLeft=$range->Borders("7"); $rangeBordersLeft->LineStyle = Null; $rangeBordersTop=$range->Borders("8"); $rangeBordersTop->LineStyle = Null; $rangeBordersBottom=$range->Borders("9"); $rangeBordersBottom->LineStyle = Null; $rangeBordersRight=$range->Borders("10"); $rangeBordersRight->LineStyle = Null; $rangeBordersVertical=$range->Borders("11"); $rangeBordersVertical->LineStyle = Null; $rangeBordersHorizontal=$range->Borders("12"); $rangeBordersHorizontal->LineStyle = Null; // ..... какие-то дальнейшие действия ..... ?> | |
Принцип действия: Рисует нижний бордюр выделенного фрагмента сплошной линией одинарной толщины.
Как реализовать:
Код: <?php $xls = new COM("Excel.Application"); // Создаем новый COM-объект $xls->Application->Visible = 1; // Заставляем его отобразиться $xls->Workbooks->Add(); // Добавляем новый документ // Задаем область таблицы $range=$xls->Range("B2:E10"); // Выделяем ее $range->Select(); // Присваиваем переменной $range выделенный фрагмент $range=$xls->Selection(); // Задаем свойства для нижней стенки таблицы $rangeBordersBottom=$range->Borders("9"); $rangeBordersBottom->LineStyle = 1; $rangeBordersBottom->Weight = 2; // ..... какие-то дальнейшие действия ..... ?> | |
Принцип действия: Рисует левый бордюр выделенного фрагмента сплошной линией одинарной толщины.
Как реализовать:
Код: <?php $xls = new COM("Excel.Application"); // Создаем новый COM-объект $xls->Application->Visible = 1; // Заставляем его отобразиться $xls->Workbooks->Add(); // Добавляем новый документ // Задаем область таблицы $range=$xls->Range("B2:E10"); // Выделяем ее $range->Select(); // Присваиваем переменной $range выделенный фрагмент $range=$xls->Selection(); // Задаем свойства для левой стенки таблицы $rangeBordersLeft=$range->Borders("7"); $rangeBordersLeft->LineStyle = 1; $rangeBordersLeft->Weight = 2; // ..... какие-то дальнейшие действия ..... ?> | |
Принцип действия: Рисует правый бордюр выделенного фрагмента сплошной линией одинарной толщины.
Как реализовать:
Код: <?php $xls = new COM("Excel.Application"); // Создаем новый COM-объект $xls->Application->Visible = 1; // Заставляем его отобразиться $xls->Workbooks->Add(); // Добавляем новый документ // Задаем область таблицы $range=$xls->Range("B2:E10"); // Выделяем ее $range->Select(); // Присваиваем переменной $range выделенный фрагмент $range=$xls->Selection(); // Задаем свойства для правой стенки таблицы $rangeBordersRight=$range->Borders("10"); $rangeBordersRight->LineStyle = 1; $rangeBordersRight->Weight = 2; // ..... какие-то дальнейшие действия ..... ?> | |
Принцип действия: Рисует нижний бордюр выделенного фрагмента сплошной двойной линией.
Как реализовать:
Код: <?php $xls = new COM("Excel.Application"); // Создаем новый COM-объект $xls->Application->Visible = 1; // Заставляем его отобразиться $xls->Workbooks->Add(); // Добавляем новый документ // Задаем область таблицы $range=$xls->Range("B2:E10"); // Выделяем ее $range->Select(); // Присваиваем переменной $range выделенный фрагмент $range=$xls->Selection(); // Задаем свойства для правой стенки таблицы $rangeBordersRight=$range->Borders("10"); $rangeBordersRight->LineStyle = 9; $rangeBordersRight->Weight = 4; // ..... какие-то дальнейшие действия ..... ?> | |
Принцип действия: Рисует нижний бордюр выделенного фрагмента сплошной линией двойной толщины.
Как реализовать:
Код: <?php $xls = new COM("Excel.Application"); // Создаем новый COM-объект $xls->Application->Visible = 1; // Заставляем его отобразиться $xls->Workbooks->Add(); // Добавляем новый документ // Задаем область таблицы $range=$xls->Range("B2:E10"); // Выделяем ее $range->Select(); // Присваиваем переменной $range выделенный фрагмент $range=$xls->Selection(); // Задаем свойства для правой стенки таблицы $rangeBordersRight=$range->Borders("10"); $rangeBordersRight->LineStyle = 1; $rangeBordersRight->Weight = 3; // ..... какие-то дальнейшие действия ..... ?> |