Yii + PHPExcel

1. Качаем phpexcel
2. Распаковываем в корень папку Classes (в данном случае это localhost)


3. Создаем тестовый файл export.php
4. Скопируем туда код из примера 01simple-download-xls

5.Поправьте

/** Include PHPExcel */
require_once dirname(__FILE__) . '/PHPExcel.php';

6.Получим
Так мы проверили PHPExcel
7. Теперь Yii
создаем в \webroot\site\protected\views\site\pages\excel.php

<? php
$path = $_SERVER['HTTP_HOST'] . '/phpexcel/export.php';
if (isset($array))
    $array = '?val='.json_encode($array);
echo "<iframe id='ifr' src=http://$path/$array align='left' seamless></iframe>";


8.view создаем ссылку

$myar = ['id' => 53, 'title' => 2, 'name' => ['lol', 'op']];
echo CHtml::ajaxLink(
        $text = 'Click me', array('req'), $ajaxOptions = array(
    'type' => 'POST',
    'update' => '#excel',
    'data' => $myar,
        ), $htmlOptions = array(
        )
);


создаем невидимый див

<div id="excel" style= "display:none"></div>

9.контролер

    public function actionReq()
    {
        $array = null;
        if (isset($_POST)) $array = $_POST;
        $content = $this->renderPartial('application.views.site.pages.excel', array('array'=>$array));
    }


10.По клику появляется документ.

11.В \webroot\phpexcel\export.php

if (isset($_GET)) $array = $_GET ;
$array = json_decode($array['val'], true);
var_dump($array);


11. Таким образом из представления мы можеи передать данные в  PHPExcel

12. Пример формирования таблицы

//выгрузка из sql запроса
while ($row = pg_fetch_row($rs))
{
    $objPHPExcel->getActiveSheet()->SetCellValue('A' . $rowCount, $row[0]);
    // Set cell Bn to the "age" column from the database (assuming you have a column called age)
    //    where n is the Excel row number (ie cell A1 in the first row)
    $objPHPExcel->getActiveSheet()->SetCellValue('B' . $rowCount, $row[2]);
    // Increment the Excel row counter
    $rowCount++;
}


//Объединение ячеек
$objPHPExcel->getActiveSheet()->mergeCells('A1:C1'); 
$objPHPExcel->getActiveSheet()->mergeCellsByColumnAndRow(5, 6, 5, 8);


//Заполнение ячеек
 $objPHPExcel->getActiveSheet()->SetCellValue('f6', 'Сегодня ');
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(5, 1, 'Сегодня ' . $title .' '.date('d-m-Y'));




Комментарии

Популярные сообщения из этого блога

Пишем логи на C# (.NET). Легкий способ.

Средства для работы с базой данный PostgreSql