发布于 2014-12-29 08:58:18 | 1753 次阅读 | 评论: 0 | 来源: PHPERZ
Symfony开源的PHP开发框架
Symfony是一个基于MVC模式的面向对象的PHP5框架。Symfony允许在一个web应用中分离事务控制,服务逻辑和表示层。
本文为大家讲解的是如何在Symfony2框架使用PHPExcel的方法,感兴趣的同学参考下.
PHPExcel 是用来操作Office Excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的电子表格,如 Excel (BIFF) .xls, Excel 2007 (OfficeOpenXML) .xlsx, CSV, Libre/OpenOffice Calc .ods, Gnumeric, PDF, HTML等等。
说到PHPExcel,确实是一个功能强大的php插件,在网上一收一大把相关教程。最近在Symfony2中用到它,感觉内容还是挺多的;而且 Symfony2将此插件做了二次封装,想用它,确实得做些工作。我在网上找了很久,没发现有Symfony2框架的PHPExcel的用法,苦老了,这框 架里又不能直接用(Symfony2框架有严格的流程控制);最后找到一国外网站,专门有讲这款插件针对Symfony2框架的用法,参考了下,方法都被 封装好了,很规矩,开发很快。下面我就来介绍一下这个插件的用法。
PHPExcel分为对Excel的导出和导入两种方法,我是参考此版本的Excel来讲的 https://github.com/liuggio/ExcelBundle,大家可以打开这个网站结合我的讲解来做。下面继续讲:
首先得安装此插件,也就是composer的安装,可以收下composer的安装方法。方法如下(你也可以直接下载,拷贝文件夹到项目,最后需要配一下Symfony2,使他支持此插件):
{ ...,"require": {...,"friendsofsymfony/user-bundle": "2.0.*@dev"} }
1.添加bundle到composer.json
2.更新依赖包
3.或执行更新所有依赖包
4.你可以直接执行下面的命令来完成一样的工作
5.配置很简单,在app/AppKernel.php文件中的$bundles数组中加入这样一个语句:new Liuggio\ExcelBundle\LiuggioExcelBundle(),
导出方法很简单,在https://github.com/liuggio/ExcelBundle这里也有简单的介绍到,上面的步骤完成后,按照这个例子,你应该在你的(实际上就是将下面的内容拷贝到你写的任何一个model中)Symfony\Bundle\FrameworkBundle\Controller\DefaultController.php文件中直接复制以下代码即可使用(其他导入方法,可以在上面网站中寻找):
namespace YOURNAME\YOURBUNDLE\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class DefaultController extends Controller{
public function indexAction(){
//创建一个空Excel对象
$phpExcelObject = $this->get('phpexcel')->createPHPExcelObject();
//设置文件属性
$phpExcelObject->getProperties()
->setCreator("liuggio")
->setLastModifiedBy("Giulio De Donato")
->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");
//设置文件内容
$phpExcelObject->setActiveSheetIndex(0)
->setCellValue('A1', 'Hello')
->setCellValue('B2', 'world!');
//设置当前表的标题
$phpExcelObject->getActiveSheet()
->setTitle('Simple');
$phpExcelObject->setActiveSheetIndex(0);
//创建一个写对象
$writer = $this->get('phpexcel')->createWriter($phpExcelObject, 'Excel5');
$response = $this->get('phpexcel')->createStreamedResponse($writer);
//设置HTTP协议(创建下载文件)
$response->headers->set('Content-Type', 'text/vnd.ms-excel; charset=utf-8');
$response->headers->set('Content-Disposition', 'attachment;filename=stream-file.xls');
$response->headers->set('Pragma', 'public');
$response->headers->set('Cache-Control', 'maxage=1');
return $response;
}
}
(导入就比较复杂了,但也不困难,只是需要设置的比较多),将一下函数复制,更改下文件名即可
public function import(){
$phpExcelObject = $this->get('phpexcel')->createPHPExcelObject($fliename);
//$inputFileType = 'Excel2007';//这个是计xlsx的
//指定为哪张表(默认第一张表)
//$objWorksheet = $phpExcelObject->getActiveSheet("sheet1");
$objWorksheet = $phpExcelObject->getActiveSheet();
//获取行数
$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
//获取列数
$highestColumnIndex = 12;
//递归输出Excel内容
$headtitle=array();
for ($row = 1;$row <= $highestRow;$row++)
{
$strs=array();
for ($col = 0;$col < $highestColumnIndex;$col++)
{
$strs[$col] =$objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
}
$headtitle[$row]=$strs;
}
return $headtitle;
}
这样就可以导入excel 文件了,但是在有多张excel时会有问题,会找不到第二张表,所以这个时候得做些处理:$objWorksheet = $phpExcelObject->getActiveSheet("??");//里面加入参数即可!
更多phpexcel的方法可以在你的安装文件里找到(方法和例子)