|
 |
Путь: >
Готовые решения
Готовые решения
Автор: - Yurik
Дата публикации - 21.5.2005
Просмотров: - 5481
Создание Excel через COM
[nb]Эти функции работают исключительно под Windows. Чтобы инициализировать объект Excel, на машине должен быть установлен Excel с опцией "Серверные компоненты". Желательно ставить Excel2000.[/nb]
[nb]До версии PHP 4.2.3 работа с COM имела сильные глюки, в частности не работал $object->Release(); Вызвав десяток раз COM объект вы бы сожрали всю свободную память. От этой беды помогают три способа<br>
1. Ctrl+Alt+Del<br>
2. Ctrl+Alt+Reset<br>
3. Установка новой версии PHP
[/nb]
Привожу скрипт, который генерирует ведомость по заработной плате, естественно, данные можно брать из БД. Скрипт показывает как открыть книгу, вставлять данные и формулы в ячейки, форматировать ячейки, делать автозаполнение.
[nb]Если указывать не абсолютный путь, то Excel будет искать файлы относительно рабочего каталога, который устанавливается в "Сервис-Параметры-Общие-Рабочий каталог"[/nb]
Для работы скрипта нужно заготовить файл blank.xls
[php]
<?php
$app= new COM("Excel.Application")
or die("Не удалось инициализировать Excel");
//Получить версию Excel
$version=$app->Version;
//запустить в фоне
$app->Visible = 0;
//открыть книгу
$app->Workbooks->Open("blank.xls");
//выделить ячейки
$range=$app->Range("A1:D1");
$range->Select();
//объединить ячейки
$app->Selection->Merge();
$app->ActiveCell->FormulaR1C1="Заработная плата";
$range=$app->Range("A2");
$range->Select();
$app->ActiveCell->FormulaR1C1="Пупкин";
$range=$app->Range("A3");
$range->Select();
$app->ActiveCell->FormulaR1C1="Васечкин";
$range=$app->Range("A4");
$range->Select();
$app->ActiveCell->FormulaR1C1="Петечкин";
$range=$app->Range("B2");
$range->Select();
$app->ActiveCell->FormulaR1C1="160";
$range=$app->Range("B3");
$range->Select();
$app->ActiveCell->FormulaR1C1="156";
$range=$app->Range("B4");
$range->Select();
$app->ActiveCell->FormulaR1C1="192";
$range=$app->Range("C2");
$range->Select();
$app->ActiveCell->FormulaR1C1="72";
$range=$app->Range("C3");
$range->Select();
$app->ActiveCell->FormulaR1C1="72";
$range=$app->Range("C4");
$range->Select();
$app->ActiveCell->FormulaR1C1="68";
$range=$app->Range("D2");
$range->Select();
//вставить формулу перемножения двух колонок
$app->ActiveCell->FormulaR1C1="=RC[-2]*RC[-1]";
//заполнить вниз
$range=$app->Range("D2:D4");
$range->Select();
$app->Selection->FillDown();
$range=$app->Range("D5");
$range->Select();
//вставить формулу суммы трех предыдущих строк
$app->ActiveCell->FormulaR1C1="=СУММ(R[-3]C:R[-1]C)";
//выделить жирным шрифтом
$range=$app->Range("D5");
$range->Select();
$range=$app->Selection->Font;
$range->Bold=True;
//сохранить новую книгу
$app->Workbooks[1]->SaveAs("Book5.xls");
$app->Quit(); //закроем приложение
$app->Release(); //высвободим объект
$app=Null;
$range=Null;
?>[
/php]
Потом можно выдать этот файл клиенту, послав нужный заголовок и открыв файл для чтения, прочитать его на стандартный вывод.
Если Вы не знаете VB для приложений, но нужно сделать генерацию Excel, есть выход. В нужном документе стартуете запись макроса и делаете вручную то что должен делать скрипт. Когда закончите запись, смотрите на VB код в редакторе по Alt+F11. Значения констант можно посмотреть по F2.
Вышеуказанный PHP код будет таким в VBA
[php]
Range("A1:D1").Select
Selection.Merge
ActiveCell.FormulaR1C1 = "Заработная плата"
Range("A2").Select
ActiveCell.FormulaR1C1 = "Пупкин"
Range("A3").Select
ActiveCell.FormulaR1C1 = "Васечкин"
Range("A4").Select
ActiveCell.FormulaR1C1 = "Петечкин"
Range("B2").Select
ActiveCell.FormulaR1C1 = "160"
Range("B3").Select
ActiveCell.FormulaR1C1 = "156"
Range("B4").Select
ActiveCell.FormulaR1C1 = "192"
Range("C2").Select
ActiveCell.FormulaR1C1 = "72"
Range("C3").Select
ActiveCell.FormulaR1C1 = "72"
Range("C4").Select
ActiveCell.FormulaR1C1 = "68"
Range("D2").Select
ActiveCell.FormulaR1C1 = "=RC[-2]*RC[-1]"
Range("D2:D4").Select
Selection.FillDown
Range("D5").Select
ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)"
Range("D5").Select
Selection.Font.Bold = True
[
/php]
Обсудить в ФОРУМе - комментариев ()
Путь: >
Готовые решения
Если вы заметили орфографическую, стилистическую или другую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
|
|