ID: 5 - Generar archivos para MS Excel en CakePHP usando PHPExcel
Posted by andphe on Sat Feb 20 01:05:10 UTC 2010. Language php

<?php
/**
* Esta vista genera al vuelo un archivo en formato MS Excel 2007
* restringiendo los valores que las columnas de los atributos
* pueden tomar.
*
* Requiere http://phpexcel.codeplex.com/ instalado la carpeta 
* app/vendors
*
*/
App::import('vendor','PHPExcel', array('file' => 'PHPExcel.php'));
App::import('vendor','PHPExcel_IOFactory', array('file' => 'PHPExcel/IOFactory.php'));

$objPHPExcel = new PHPExcel();

// Create a first sheet
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setCellValue('A1', "C�digo");
$objPHPExcel->getActiveSheet()->setCellValue('B1', "Nombre");
$objPHPExcel->getActiveSheet()->setCellValue('C1', "M�nimo");
$objPHPExcel->getActiveSheet()->setCellValue('D1', "M�ximo");
$objPHPExcel->getActiveSheet()->setCellValue('E1', "Precio");
$letter = 70;

foreach($products[0]['Attribute'] as $attribute){ //works exporting a product 
    $objPHPExcel->getActiveSheet()->setCellValue(chr($letter++).'1', $attribute['name']);

    unset($objValidation);
    $objValidation = $objPHPExcel->getActiveSheet()->getCell('F2')->getDataValidation();
    $objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_LIST );
    $objValidation->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_INFORMATION );
    $objValidation->setAllowBlank(false);
    $objValidation->setShowInputMessage(true);
    $objValidation->setShowErrorMessage(true);
    $objValidation->setShowDropDown(true);
    $objValidation->setErrorTitle('Input error');
    $objValidation->setError('Value is not in list.');
    $objValidation->setPromptTitle('Pick from list');
    $objValidation->setPrompt('Please pick a value from the drop-down list.');

    $productOptions = Set::extract($options[$attribute['id']],'{n}.name');
    $objValidation->setFormula1('"'.implode(',', $productOptions).'"');	// Make sure to put the list items between " and "  !!!
    $validations[$attribute['id']] = clone $objValidation;

}

$row = 2;
for($i = 0;$i<100;$i++){
    $price = @$products[0]['Price'][$i];
    $objPHPExcel->getActiveSheet()->setCellValue('A'.$row, @$price['product_id'] );
    $objPHPExcel->getActiveSheet()->setCellValue('B'.$row, (@$price['product_id']?$products[0]['Product']['name']:''));
    $objPHPExcel->getActiveSheet()->setCellValue('C'.$row, @$price['min'] );
    $objPHPExcel->getActiveSheet()->setCellValue('D'.$row, @$price['max'] );
    $objPHPExcel->getActiveSheet()->setCellValue('E'.$row, @$price['price'] );
    $letter = 70;
    foreach($products[0]['Attribute'] as $attribute){ //works exporting a product
        $objPHPExcel->getActiveSheet()->getCell(chr($letter++).$row)->setDataValidation($validations[$attribute['id']]);
    }
    $row++;
}

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');