::: PHP.com.ua - учимся вместе. ::: ::: PHP.com.ua - учимся вместе. :::



 
   - Вакансия PHP-программист, Днепропетровск...
  - Проблема с передачей переменной в PHP ск...
  - Как хранить конфигурацию cms'ки?
  - Проблема с сортировкой массива
  - коллизии md5
  - Странный глюк функции date
  - Скроллинг в iframe


Главная
Новости
Статьи
Шпаргалки
Файлы
О проекте
Форум
Футболки


FREEhost.com.ua - купил хостинг 10 у.е. на Begun в подарок.

iName.com.ua - регистрация доменных имен и хороший хостинг.

Библиотека программиста - нужный вам исходник или документация по необходимому для вас языку программирования.

Designclub - Клуб дизайнеров Украины.

Регистрация доменов
Хостинг

 HowtoForge.ORG.UA - Это первый Украинский ресурс развития open source программного обеспечения


Путь: Статьи > Готовые решения

Готовые решения

Автор: - 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.
Контакты Design by webFaction Ukrainian PHP Group 2004-2005