Советы по PHP : Из PHP в Excel: работа с COM-объектами : Рисование таблиц

смотрим также
    Источник: #.

Материал из Справочник Web-языков

Перейти к: навигация, поиск


Общие возможности

В 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 Изображение:Excel_border_w11.gif Изображение:Excel_border_w21.gif Изображение:Excel_border_w31.gif Изображение:Excel_border_w41.gif
LineStyle = 2 Изображение:Excel_border_w11.gif Изображение:Excel_border_w22.gif Изображение:Excel_border_w32.gif Изображение:Excel_border_w41.gif
LineStyle = 3 Изображение:Excel_border_w11.gif Изображение:Excel_border_w23.gif Изображение:Excel_border_w31.gif Изображение:Excel_border_w41.gif
LineStyle = 4 Изображение:Excel_border_w11.gif Изображение:Excel_border_w24.gif Изображение:Excel_border_w34.gif Изображение:Excel_border_w41.gif
LineStyle = 5 Изображение:Excel_border_w11.gif Изображение:Excel_border_w25.gif Изображение:Excel_border_w35.gif Изображение:Excel_border_w41.gif
LineStyle = 6 Изображение:Excel_border_w11.gif Изображение:Excel_border_w21.gif Изображение:Excel_border_w36.gif Изображение:Excel_border_w41.gif
LineStyle = 7 Изображение:Excel_border_w11.gif Изображение:Excel_border_w21.gif Изображение:Excel_border_w31.gif Изображение:Excel_border_w41.gif
LineStyle = 8 Изображение:Excel_border_w11.gif Изображение:Excel_border_w22.gif Изображение:Excel_border_w32.gif Изображение:Excel_border_w41.gif
LineStyle = 9 Изображение:Excel_border_w11.gif Изображение:Excel_border_w21.gif Изображение:Excel_border_w31.gif Изображение:Excel_border_w49.gif
LineStyle = 10 Изображение:Excel_border_w11.gif Изображение:Excel_border_w24.gif Изображение:Excel_border_w34.gif Изображение:Excel_border_w41.gif
LineStyle = 11 Изображение:Excel_border_w11.gif Изображение:Excel_border_w25.gif Изображение:Excel_border_w35.gif Изображение:Excel_border_w41.gif
LineStyle = 12 Изображение:Excel_border_w11.gif Изображение:Excel_border_w21.gif Изображение:Excel_border_w31.gif Изображение:Excel_border_w49.gif
LineStyle = 13 Изображение:Excel_border_w11.gif Изображение:Excel_border_w21.gif Изображение:Excel_border_w36.gif Изображение:Excel_border_w41.gif

Пример формирования такой таблички в 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;$iRange("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;$iRange("C".($i+1));
  $rangeBordersRight=$range->Borders("9");
  $rangeBordersRight->LineStyle = $i;
  $rangeBordersRight->Weight = 2;
};

for($i=1;$iRange("D".($i+1));
  $rangeBordersRight=$range->Borders("9");
  $rangeBordersRight->LineStyle = $i;
  $rangeBordersRight->Weight = 3;
};

for($i=1;$iRange("E".($i+1));
  $rangeBordersRight=$range->Borders("9");
  $rangeBordersRight->LineStyle = $i;
  $rangeBordersRight->Weight = 4;
};

?>

Для закрепления материала рассмотрим как осуществить на PHP формирование границ таблицы на примере некоторых стандратных средств Excel.

Изображение:Icons_excel_table_borders.gif

Изображение:Icon_excel_table_borders_1.gif Принцып действия:

Удаляет в выбранном диапазоне все границы, рамки и т.д.

Как реализовать:

Задаем для всех стенок и внутренних линий стиль отображения: отсутствуют (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();

// Задаем свойства для всей таблицы
$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;

// ..... какие-то дальнейшие действия .....
?>
Изображение:Icon_excel_table_borders_2.gif Принцып действия:

Рисует нижний бордюр выделенного фрагмента сплошной линией одинарной толщины.

Как реализовать:

Задаем для нижнего бордюра стиль линии: сплошная (LineStyle = 1), толщина: одинарная (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();

// Задаем свойства для нижней стенки таблицы
$rangeBordersBottom=$range->Borders("9");
$rangeBordersBottom->LineStyle = 1;
$rangeBordersBottom->Weight = 2;

// ..... какие-то дальнейшие действия .....
?>
Изображение:Icon_excel_table_borders_3.gif Принцип действия:

Рисует левый бордюр выделенного фрагмента сплошной линией одинарной толщины.

Как реализовать:

Задаем для левого бордюра стиль линии: сплошная (LineStyle = 1), толщина: одинарная (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;

// ..... какие-то дальнейшие действия .....
?>
Изображение:Icon_excel_table_borders_4.gif Принцип действия:

Рисует правый бордюр выделенного фрагмента сплошной линией одинарной толщины.

Как реализовать:

Задаем для правого бордюра стиль линии: сплошная (LineStyle = 1), толщина: одинарная (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;

// ..... какие-то дальнейшие действия .....
?>
Изображение:Icon_excel_table_borders_5.gif Принцип действия:

Рисует нижний бордюр выделенного фрагмента сплошной двойной линией.

Как реализовать:

Задаем для нижнего бордюра стиль линии: двойная (LineStyle = 9), толщина: 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 = 9;
$rangeBordersRight->Weight = 4;

// ..... какие-то дальнейшие действия .....
?>
Изображение:Icon_excel_table_borders_6.gif Принцип действия:

Рисует нижний бордюр выделенного фрагмента сплошной линией двойной толщины.

Как реализовать:

Задаем для нижнего бордюра стиль линии: одинарная (LineStyle = 1), толщина: Weight = 3

Код:

<?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;

// ..... какие-то дальнейшие действия .....
?>
Добавить страницу в закладки:
РАЗРЕШАЕТСЯ перепечатывать и копировать информацию ТОЛЬКО ПРИ РАЗМЕЩЕНИИ ссылки на оригинал!
(<A href="https://www.spravkaweb.ru/">Справочник Web-языков</A>)
другие проекты
Rambler\'s Top100 Индекс цитирования