Symfony2 Excel bundle
, (*1)
This bundle permits you to create an easily modifiable excel object.
This is just a dependency injection that links, (*2)
3 Objects:, (*3)
-
The container in this bundle,, (*4)
-
The StreamWrapper in the n3bStreamresponse, (*5)
-
A Writer., (*6)
You could create your own writer extending n3b\Bundle\Util\HttpFoundation\StreamResponse\StreamWriterInterface
or you could use the great PHPExcel library. With PHPExcel you can create xls, ods, pdf and more., (*7)
You have to know that csv is faster so I encourage you to use the built-in function for csv: http://it.php.net/manual-lookup.php?pattern=csv&lang=en&scope=quickref, (*8)
Migration
In order to follow the naming convention https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md all the liuggio namespaces are migrated to Liuggio., (*9)
This master is up-to-date to the symfony/symfony master actually on 2.1, (*10)
INSTALLATION with COMPOSER
1 Add to composer.json to the require
key, (*11)
"require" : {
"liuggio/excelbundle": ">=1.0.4",
}
2 Register the bundle in app/AppKernel.php
, (*12)
``` php
$bundles = array(
// ...
new Liuggio\ExcelBundle\LiuggioExcelBundle(),
);, (*13)
## INSTALLATION with deps file
1 Add to the following to your `deps` file, then run `php bin/vendors install`
``` yaml
[PHPExcel]
git=http://github.com/PHPOffice/PHPExcel.git
target=/phpexcel
version=origin/master
[n3bStreamresponse]
git=git://github.com/liuggio/Symfony2-StreamResponse.git
target=n3b/src/n3b/Bundle/Util/HttpFoundation/StreamResponse
[LiuggioExcelBundle]
git=https://github.com/liuggio/ExcelBundle.git
target=/bundles/Liuggio/ExcelBundle
2 Register the namespaces and prefixes in app/autoload.php
:, (*14)
``` php
$loader->registerNamespaces(array(
// ...
'n3b\Bundle\Util\HttpFoundation\StreamResponse' => DIR.'/../vendor/n3b/src',
'Liuggio' => DIR.'/../vendor/bundles',
));
$loader->registerPrefixes(array(
// ...
'PHPExcel' => DIR.'/../vendor/phpexcel/Classes',
));, (*15)
3 Enable the bundle in `app/AppKernel.php`
``` php
$bundles = array(
// ...
new Liuggio\ExcelBundle\LiuggioExcelBundle(),
);
AVAILABLE SERVICES
If you want to write, (*16)
``` php
// create MS Excel5
$excelService = $this->get('xls.service_xls5');
// create pdf
$this->get('xls.service_pdf');
// create MS Excel 2007
$this->get('xls.service_xls2007');, (*17)
If you want to read xls
``` php
$excelObj = $this->get('xls.load_xls5')->load($filename);
USAGE
Create a controller in your bundle, (*18)
``` php, (*19)
namespace YOURNAME\YOURBUNDLE\Controller;, (*20)
use Symfony\Bundle\FrameworkBundle\Controller\Controller;, (*21)
class DefaultController extends Controller
{, (*22)
public function indexAction($name)
{
// ask the service for a Excel5
$excelService = $this->get('xls.service_xls5');
// or $this->get('xls.service_pdf');
// or create your own is easy just modify services.yml
// create the object see http://phpexcel.codeplex.com documentation
$excelService->excelObj->getProperties()->setCreator("Maarten Balliauw")
->setLastModifiedBy("Maarten Balliauw")
->setTitle("Office 2005 XLSX Test Document")
->setSubject("Office 2005 XLSX Test Document")
->setDescription("Test document for Office 2005 XLSX, generated using PHP classes.")
->setKeywords("office 2005 openxml php")
->setCategory("Test result file");
$excelService->excelObj->setActiveSheetIndex(0)
->setCellValue('A1', 'Hello')
->setCellValue('B2', 'world!');
$excelService->excelObj->getActiveSheet()->setTitle('Simple');
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$excelService->excelObj->setActiveSheetIndex(0);
//create the response
$response = $excelService->getResponse();
$response->headers->set('Content-Type', 'text/vnd.ms-excel; charset=utf-8');
$response->headers->set('Content-Disposition', 'attachment;filename=stdream2.xls');
// If you are using a https connection, you have to set those two headers and use sendHeaders() for compatibility with IE <9
$response->headers->set('Pragma', 'public');
$response->headers->set('Cache-Control', 'maxage=1');
return $response;
}
}, (*23)
With the right writer (e.g. PHPExcel_Writer_Excel5) you could also write the output to a file:
``` php
public function indexAction($name)
{
$excelService = $this->get('xls.service_xls5');
//...create php excel object
$excelService->getStreamWriter()->write( $filename );
}
ADVANCED USE
If you need to, see and modify Liuggio\ExcelBundle\Resources\config\services.yml
, (*24)
Contributors
@pivasyk, (*25)
@dirkbl, (*26)
@DerStoffel, (*27)
@artturi, (*28)
@isqad88, (*29)
@mazenovi, (*30)
@jochenhilgers, (*31)
@Squazic, (*32)