Создавая этот форум я рассчитываю на Вашу сознательность.
Прошу не флудить. Не надо спрашивать о том, что конкретно может быть описано в мануалах.
В таких случаях Вы банально будете отосланы а Гуглу и RTFM(FAQ).
Я хочу поговорить о интересных проблемах и путях их решения.
Для затравочки выкладываю интересную статью, которую искал довольно долго.
Рейтинг редкости материала: ~7-8 баллов
Из PHP в Excel: работа с COM-объектами
Введение
Данная серия статей посвящена созданию документов Excel при помощи PHP. Данная возможнось может понадобиться, например, если нужно предоставить пользователю загружаемые данные в виде листов Excel. Это могут быть прайсы на продукцию, автоматически генерируемые из базы данных на сервере, либо какие-то документы, которые также необходимо представить в виде документов Excel.
Здесь рассматривается возможность работы с Excel-документами через COM-объект. К сожалению работа с COM-объектами в PHP возможна только на Windows-платформах. По-этому если Вы используете Unix-хостинг, то создавать и редактировать Excel-документы приведенным ниже способом не получится.
Работа с COM-объектами производится при помощи синтактсиса
Код
$com_object = new COM($object);
где
$com_object - новый COM-объект;
$object - id-класс требуемого объекта.
Для создания Excel-документов переменной $object необходимо задать значение "Excel.Application" либо "Excel.sheet".
Код
$xsl = new COM("Excel.Application");
После создания нового COM-объекта, можно обращаться к его свойствам и методам:
Код
<?php
$xls = new COM("Excel.Application"); // Создаем новый COM-объект
$xls->Application->Visible = 1; // Заставляем его отобразиться
$xls->Workbooks->Add(); // Добавляем новый документ
$rangeValue = $xls->Range("A1");
$rangeValue->Value = "В выделенном блоке текст будет жирный, подчеркнутый, наклонный";
$rangeValue = $xls->Range("A2");
$rangeValue->Value = "Шрифт будет иметь высоту 12";
$rangeValue = $xls->Range("A3");
$rangeValue->Value = "Имя шрифта - Times New Roman";
$range=$xls->Range("A1:J10"); // Определяем область ячеек
$range->Select(); // Выделяем ее
$fontRange=$xls->Selection(); // Присваиваем переменной выделенную область
// Далее задаем параметры форматирования текста в выделенной области
$fontRange->Font->Bold = true; // Жирный
$fontRange->Font->Italic = true; // Курсив
$fontRange->Font->Underline = true; // Подчеркнутый
$fontRange->Font->Name = "Times New Roman"; // Имя шрифта
$fontRange->Font->Size = 12; // Размер шрифта
?>
$xls = new COM("Excel.Application"); // Создаем новый COM-объект
$xls->Application->Visible = 1; // Заставляем его отобразиться
$xls->Workbooks->Add(); // Добавляем новый документ
$rangeValue = $xls->Range("A1");
$rangeValue->Value = "В выделенном блоке текст будет жирный, подчеркнутый, наклонный";
$rangeValue = $xls->Range("A2");
$rangeValue->Value = "Шрифт будет иметь высоту 12";
$rangeValue = $xls->Range("A3");
$rangeValue->Value = "Имя шрифта - Times New Roman";
$range=$xls->Range("A1:J10"); // Определяем область ячеек
$range->Select(); // Выделяем ее
$fontRange=$xls->Selection(); // Присваиваем переменной выделенную область
// Далее задаем параметры форматирования текста в выделенной области
$fontRange->Font->Bold = true; // Жирный
$fontRange->Font->Italic = true; // Курсив
$fontRange->Font->Underline = true; // Подчеркнутый
$fontRange->Font->Name = "Times New Roman"; // Имя шрифта
$fontRange->Font->Size = 12; // Размер шрифта
?>
Открытие, запись, закрытие документа
Общие возможности:
В Excel при помощи PHP можно произвести следующие действия с документами:
создать новый документ;
открыть ранее созданный документ;
сохранить открытый документ;
закрыть документ.
Создание нового документа:
Создание нового документа в Excel происходит в три действия:
- Создаем "связь" между PHP и Excel (создается дескриптор, как при работе с файлами);
- Указываем, будет ли визуально открыта программа или нет;
- Указываем программе через дескриптор, что нужно открыть новый документ.
Для создания дескриптора ("связи") нужно использовать обращение к Excel через COM-объект:
Код
$xls = new COM("Excel.Application");
Теперь через дескриптор $xls мы можем обращаться ко всем свойствам и методам Excel.
Будет ли отображаться Excel или нет, указывается в свойстве Visible() объекта Application().
Если мы этому свойству присвоим значение 1, то программа будет отображаться, если 0, то нет:
Код
$xls->Application->Visible = 1;
Ну и, наконец, добавить новый документ можно при помощи метода Add() объекта Workbooks():
Код
$xls->Workbooks->Add();
Т.е. чтобы просто запустить при помощи PHP Excel нужно выполнить следующий код:
Код
<?php
$xls = new COM("Excel.Application"); // Создаем новый COM-объект
$xls->Application->Visible = 1; // Заставляем его отобразиться
$xls->Workbooks->Add(); // Добавляем новый документ
?>
$xls = new COM("Excel.Application"); // Создаем новый COM-объект
$xls->Application->Visible = 1; // Заставляем его отобразиться
$xls->Workbooks->Add(); // Добавляем новый документ
?>
Первые две строки этого примера нужно использовать всегда при работе с Excel через PHP.
Открытие ранее созданного документа:
Открытие документа можно сделать при помощи метода Open() объекта Workbooks().
В передаваемом методу Open() параметре нужно указать имя открываемого файла:
Код
<?php
$xls = new COM("Excel.Application"); // Создаем новый COM-объект
$xls->Application->Visible = 1; // Заставляем его отобразиться
$xls->Workbooks->Open("C:\test.xls"); // Открываем ранее сохраненный документ
?>
$xls = new COM("Excel.Application"); // Создаем новый COM-объект
$xls->Application->Visible = 1; // Заставляем его отобразиться
$xls->Workbooks->Open("C:\test.xls"); // Открываем ранее сохраненный документ
?>
Если указать не полный а относительный путь, то поиск открываемого файла будет происходить не на сервере а на компьютере пользователя (по умолчанию это папка "Мои документы").
Сохранение открытого документа:
Сохранение открытого документа производится при помощи метода SaveAs() объекта Workbooks():
Код
<?php
$xls = new COM("Excel.Application"); // Создаем новый COM-объект
$xls->Application->Visible = 1; // Заставляем его отобразиться
$xls->Workbooks->Add();
$range=$xls->Range("A1"); // Выбрали ячейку A1
$range->Value = "Проба записи"; // Вставили значение
// Сохраняем документ
$xls->Workbooks[1]->SaveAs("test.xls");
$xls->Quit(); //Закрываем приложение
$xls->Release(); //Высвобождаем объекты
$xls = Null;
$range = Null;
?>
$xls = new COM("Excel.Application"); // Создаем новый COM-объект
$xls->Application->Visible = 1; // Заставляем его отобразиться
$xls->Workbooks->Add();
$range=$xls->Range("A1"); // Выбрали ячейку A1
$range->Value = "Проба записи"; // Вставили значение
// Сохраняем документ
$xls->Workbooks[1]->SaveAs("test.xls");
$xls->Quit(); //Закрываем приложение
$xls->Release(); //Высвобождаем объекты
$xls = Null;
$range = Null;
?>
Закрытие документа:
Закрытие документа производится методом Quit().
Код
<?php
$xls = new COM("Excel.Application"); // Создаем новый COM-объект
$xls->Application->Visible = 1; // Заставляем его отобразиться
$xls->Workbooks->Add();
$range=$xls->Range("A1"); // Выбрали ячейку A1
$range->Value = "Что-то записываем"; // Вставили значение
// Сохраняем документ
$xls->Workbooks[1]->SaveAs("test.xls");
$xls->Quit(); //Закрываем приложение
$xls->Release(); //Высвобождаем объекты
$xls = Null;
$range = Null;
?>
$xls = new COM("Excel.Application"); // Создаем новый COM-объект
$xls->Application->Visible = 1; // Заставляем его отобразиться
$xls->Workbooks->Add();
$range=$xls->Range("A1"); // Выбрали ячейку A1
$range->Value = "Что-то записываем"; // Вставили значение
// Сохраняем документ
$xls->Workbooks[1]->SaveAs("test.xls");
$xls->Quit(); //Закрываем приложение
$xls->Release(); //Высвобождаем объекты
$xls = Null;
$range = Null;
?>
Чуть позже я могу подготовить материал по разделам:
- Формат ячеек: Выравнивание
- Формат ячеек: Шрифт
- Работа со строками
- Работа с колонками
- Добавление / Удаление / Переименование листов
- Рисование таблиц
- Копирование / вставка ячеек
если кому-то будет это интересно