How to use PHPExcel correctly with Symfony 2
Actually, to do it right you need to follow next steps:
- Edit your
deps
file and add dependency from thePHPExcel
[PHPExcel]git=http://github.com/PHPOffice/PHPExcel.gittarget=/phpexcelversion=origin/master
Run
php bin/vendors install
in order to install all missing dependencies (PHPExcel
in our case)Update prefixes section in
app/autoload.php
:
$loader->registerPrefixes(array( // ... 'PHPExcel' => __DIR__.'/../vendor/phpexcel/Classes',));
- Done. Now, you can use it in your bundle's controller (code based on
PHPExcel
example fromTests/01simple-download-xls.php
):
<?phpnamespace Demo\MyBundle\Controller;use Symfony\Bundle\FrameworkBundle\Controller\Controller;use Symfony\Component\HttpFoundation\Response;use PHPExcel;use PHPExcel_IOFactory;class DemoController extends Controller{ public function demoAction() { $response = new Response(); // Create new PHPExcel object $objPHPExcel = new PHPExcel(); // Set document properties $objPHPExcel->getProperties()->setCreator("Me") ->setLastModifiedBy("Someone") ->setTitle("My first demo") ->setSubject("Demo Document"); // Add some data $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A1', 'Hello') ->setCellValue('B2', 'world!') ->setCellValue('C1', 'Hello') ->setCellValue('D2', 'world!'); // Set active sheet index to the first sheet $objPHPExcel->setActiveSheetIndex(0); // Redirect output to a client’s web browser (Excel5) $response->headers->set('Content-Type', 'application/vnd.ms-excel'); $response->headers->set('Content-Disposition', 'attachment;filename="demo.xls"'); $response->headers->set('Cache-Control', 'max-age=0'); $response->prepare(); $response->sendHeaders(); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); exit(); }}
- Copy the library to your vendors directory.
Configure autoloader in your bootstrap file:
$loader->registerPrefixes(array( // Swift, Twig etc. 'PHPExcel' => __DIR__ . '/../vendor/phpexcel/lib/PHPExcel'));
That's all.
actually the best solution is to use https://github.com/liuggio/ExcelBundle.I tried to use @Crozin's solution but I was still getting an error about IOFactory::createWriter.Hope this helps,Simone