PHP

Создание Excel документа XLSX на PHP с помощью PHPExcel

Часто на сайтах требуется выгрузка каких либо данных в формате excel (xslx). Естественно все хотят чтоб документ был уже сразу на выходе красиво оформлен. Недавно и мне потребовалось сделать такую выгрузку на php. Принято было решение использовать библиотеку PHPExcel – ее можно скачать тут http://phpexcel.codeplex.com

В скачанном вами архиве очень много документации и примеров, библиотека позволяет все от простого форматирования текста и формата ячеек до создания красивых графиков.

В моем случае, нужно было просто закрасить ячейку в нужный цвет в зависимости от значения в данной ячейке.
Подключаем библиотеку, указываем данные нашего документа:
require_once 'phpexcel/Classes/PHPExcel.php';
 
// Create new PHPExcel object
 
$objPHPExcel = new PHPExcel();
 
// Set document properties
 
$objPHPExcel->getProperties()->setCreator("test")
    ->setLastModifiedBy("test")
    ->setTitle("test")
    ->setSubject("test")
    ->setDescription("test")
    ->setKeywords("test")
    ->setCategory("test");

Далее инициализируем возможные стили для ячеек, я указал border(границы) и background (закраску цветом):
$red = new PHPExcel_Style();
$yellow = new PHPExcel_Style();
$green = new PHPExcel_Style();
 
$red->applyFromArray(
    array('fill'  => array(
        'type'    => PHPExcel_Style_Fill::FILL_SOLID,
        'color'   => array('rgb' => 'FF3333')
        ),
        'borders' => array(
            'bottom'  => array('style' => PHPExcel_Style_Border::BORDER_THIN),
            'right'   => array('style' => PHPExcel_Style_Border::BORDER_THIN)
        )
 
    ));
 
$yellow->applyFromArray(
    array('fill'  => array(
        'type'    => PHPExcel_Style_Fill::FILL_SOLID,
        'color'   => array('rgb' => 'FFFF66')
        ),
        'borders' => array(
            'bottom'  => array('style' => PHPExcel_Style_Border::BORDER_THIN),
            'right'   => array('style' => PHPExcel_Style_Border::BORDER_THIN)
        )
    ));
 
$green->applyFromArray(
    array('fill'  => array(
        'type'    => PHPExcel_Style_Fill::FILL_SOLID,
        'color'   => array('rgb' => '66CC66')
        ),
        'borders' => array(
            'bottom'  => array('style' => PHPExcel_Style_Border::BORDER_THIN),
            'right'   => array('style' => PHPExcel_Style_Border::BORDER_THIN)
        )
    ));

Далее нам нужно внести данные в таблицу excel, делается это очень просто. Для того чтоб было быстрее я использовал метод fromArray:
$objPHPExcel->getActiveSheet()->fromArray($data_arr, NULL, 'A1'); // A1 - ячейка с которой начинаем вставку

А лишь потом делал закраску ячеек цветом ($data_arr – массив с данными)
$temp=array('B'=>'first','C'=>'second','D'=>'third','E'=>'fourth','F'=>'fifth','G'=>'sixth');
 
foreach($data_arr as $r => $dataRow) {
    $row = $baseRow + $r;
 
    foreach($temp as $k=>$t) {
        $color=getStyle($dataRow[$t]);
        // выставляем нужный цвет
        $objPHPExcel->getActiveSheet()->setSharedStyle($$color, $k.''.$row);
    }
 
}
 
function getStyle($value) {
    if ($value <= 45 && $value >= 0)
        return "green";
    elseif ($value > 45 && $value < 50)
        return "yellow";
    else
        return "red";
}

Для 10 тысяч строк этот случай обрабатывался гораздо быстрее чем тот, где мы построчно заносим данные в xlsx документ:
foreach($data_arr as $r => $dataRow) {
    $row = $baseRow + $r;
    $objPHPExcel->getActiveSheet()->insertNewRowBefore($row,1);
 
    foreach($temp as $k=>$t) {
        $color=getStyle($dataRow[$t]);
        $objPHPExcel->getActiveSheet()->setCellValue($k.''.$row, $dataRow[$t])->setSharedStyle($$color, $k.''.$row);
    }
}

Так же можно вручную указать ширину колонке, например самая первая колонка у меня должна была быть немного шире чем обычно:
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(20);

Форматирование закончено, можем сохранить файл созданный с помощью php генератора excel файла в формате xlsx:
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('filename.xlsx');
Теги:
Excel, XLSX, PHPExcel
Добавлено: 22 Сентября 2013 01:48:40 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...