YII中整合PHPEXCEL进行数据导出功能
2014-01-04 09:44
316 查看
在做WEB管理后台的时候,如果涉及到某些特殊数据需要导出进行核算的时候,这个时候就需要进行EXCEL数据导出,目前比较强大的PHPEXCEL导出类可以满足需求,首先需要下载最新的PHPEXCEL类包,这个可以到官网进行下载,解压后将整个解压包放置如下位置:
配置好后,需要在Controller.php中扩展PHPEXCEL导出方法,方便日常生活中经常使用。
打开Controller.php(该文件位于如下图所示的文件夹内):
在该文件中增加如下所示的PHPEXCEL导出方法:
/**
* @todo export data as excel
* @param array $excel_content = array(
array(
'sheet_name' => '测试1',
'sheet_title' => array(
'姓名',
'性别',
'年龄'
),
'ceils' => array(
array('张三', '男', '25'),
array('李四', '男', '23'),
array('王五', '男', '30'),
)
),
array(
'sheet_name' => '测试2',
'sheet_title' => array(
'姓名',
'性别',
'年龄'
),
'ceils' => array(
array('张三', '男', '25'),
array('李四', '男', '23'),
array('王五', '男', '30'),
)
),
);
* @param string $excel_file 文件名称
* @param array $excel_props EXCEL属性
* @return file download
*/
public function exportExcel( $excel_content, $excel_file, $excel_props=array('creator'=>'GGBOUND', 'title'=>'EXPORT EXCEL', 'subject'=>'EXPORT EXCEL', 'desc'=>'EXPORT EXCEL', 'keywords'=>'EXPORT EXCEL', 'category'=>'EXPORT EXCEL')){
if (!is_array($excel_content)){
return FALSE;
}
//PHPEXCEL包路径
$phpExcelPath=Yii::app() -> request -> baseUrl.'/protected/extensions/phpexcel/';
spl_autoload_unregister(array('YiiBase','autoload'));//取消YII自动加载
include($phpExcelPath . 'PHPExcel.php');//引入PHPEXCEL类
//设置文档基本属性
$objPHPExcel = new PHPExcel();
$objProps = $objPHPExcel -> getProperties();
$objProps->setCreator($excel_props['creator']);
$objProps->setLastModifiedBy($excel_props['creator']);
$objProps->setTitle($excel_props['title']);
$objProps->setSubject($excel_props['subject']);
$objProps->setDescription($excel_props['desc']);
$objProps->setKeywords($excel_props['keywords']);
$objProps->setCategory($excel_props['category']);
//开始执行EXCEL数据导出
for ($i=0;$i<count($excel_content);$i++){
$each_sheet_content = $excel_content[$i];
if ($i==0){
//默认会创建一个sheet页,故不需在创建
$objPHPExcel -> setActiveSheetIndex(intval(0));
$current_sheet = $objPHPExcel -> getActiveSheet();
}else{
//创建sheet
$objPHPExcel -> createSheet();
$current_sheet = $objPHPExcel -> getSheet($i);
}
//设置sheet title
$current_sheet -> setTitle( $each_sheet_content['sheet_name'] );
//设置sheet当前页的标题
if (array_key_exists('sheet_title', $each_sheet_content) && !empty($each_sheet_content['sheet_title'])){
for($j=0; $j<count($each_sheet_content['sheet_title']); $j++){
$current_sheet->setCellValueByColumnAndRow($j, 1, $each_sheet_content['sheet_title'][$j]);
}
}
//写入sheet页面内容
if(array_key_exists('ceils', $each_sheet_content) && !empty($each_sheet_content['ceils'])){
for($k=0; $k<count($each_sheet_content['ceils']); $k++){
for($l=0; $l<count($each_sheet_content['ceils'][$k]); $l++){
$current_sheet->setCellValueByColumnAndRow($l, $k+2, $each_sheet_content['ceils'][$k][$l]);
}
}
}
}
//生成EXCEL并下载
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$excel_file.'-'.date('Y-m-d-H-i-s').'.xls"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');//自动下载
Yii::app()->end();
//恢复Yii自动加载功能
spl_autoload_register(array('YiiBase','autoload'));
}
该类自动生成EXCEL文件并下载,下面附带导出功能的测试代码:
//数据库导出为EXCEL示例
$siteDb = new SiteModel();
$return =$siteDb -> testMysql();
$excel_data = $this -> excelDataFormat($return);//此处使用了上篇文章中说道的数据格式化类
$excel_title = $excel_data['excel_title'];
$excel_ceils = $excel_data['excel_ceils'];
$excel_content = array(
array(
'sheet_name' => '测试1',
'sheet_title' => $excel_title ,
'ceils' => $excel_ceils ,
),
array(
'sheet_name' => '测试2',
'sheet_title' => $excel_title ,
'ceils' => $excel_ceils ,
),
);
$excel_file='test';
$this->exportExcel($excel_content, $excel_file);
到此简单的PHPEXCEL导出类整合进入YII就完成了。
配置好后,需要在Controller.php中扩展PHPEXCEL导出方法,方便日常生活中经常使用。
打开Controller.php(该文件位于如下图所示的文件夹内):
在该文件中增加如下所示的PHPEXCEL导出方法:
/**
* @todo export data as excel
* @param array $excel_content = array(
array(
'sheet_name' => '测试1',
'sheet_title' => array(
'姓名',
'性别',
'年龄'
),
'ceils' => array(
array('张三', '男', '25'),
array('李四', '男', '23'),
array('王五', '男', '30'),
)
),
array(
'sheet_name' => '测试2',
'sheet_title' => array(
'姓名',
'性别',
'年龄'
),
'ceils' => array(
array('张三', '男', '25'),
array('李四', '男', '23'),
array('王五', '男', '30'),
)
),
);
* @param string $excel_file 文件名称
* @param array $excel_props EXCEL属性
* @return file download
*/
public function exportExcel( $excel_content, $excel_file, $excel_props=array('creator'=>'GGBOUND', 'title'=>'EXPORT EXCEL', 'subject'=>'EXPORT EXCEL', 'desc'=>'EXPORT EXCEL', 'keywords'=>'EXPORT EXCEL', 'category'=>'EXPORT EXCEL')){
if (!is_array($excel_content)){
return FALSE;
}
//PHPEXCEL包路径
$phpExcelPath=Yii::app() -> request -> baseUrl.'/protected/extensions/phpexcel/';
spl_autoload_unregister(array('YiiBase','autoload'));//取消YII自动加载
include($phpExcelPath . 'PHPExcel.php');//引入PHPEXCEL类
//设置文档基本属性
$objPHPExcel = new PHPExcel();
$objProps = $objPHPExcel -> getProperties();
$objProps->setCreator($excel_props['creator']);
$objProps->setLastModifiedBy($excel_props['creator']);
$objProps->setTitle($excel_props['title']);
$objProps->setSubject($excel_props['subject']);
$objProps->setDescription($excel_props['desc']);
$objProps->setKeywords($excel_props['keywords']);
$objProps->setCategory($excel_props['category']);
//开始执行EXCEL数据导出
for ($i=0;$i<count($excel_content);$i++){
$each_sheet_content = $excel_content[$i];
if ($i==0){
//默认会创建一个sheet页,故不需在创建
$objPHPExcel -> setActiveSheetIndex(intval(0));
$current_sheet = $objPHPExcel -> getActiveSheet();
}else{
//创建sheet
$objPHPExcel -> createSheet();
$current_sheet = $objPHPExcel -> getSheet($i);
}
//设置sheet title
$current_sheet -> setTitle( $each_sheet_content['sheet_name'] );
//设置sheet当前页的标题
if (array_key_exists('sheet_title', $each_sheet_content) && !empty($each_sheet_content['sheet_title'])){
for($j=0; $j<count($each_sheet_content['sheet_title']); $j++){
$current_sheet->setCellValueByColumnAndRow($j, 1, $each_sheet_content['sheet_title'][$j]);
}
}
//写入sheet页面内容
if(array_key_exists('ceils', $each_sheet_content) && !empty($each_sheet_content['ceils'])){
for($k=0; $k<count($each_sheet_content['ceils']); $k++){
for($l=0; $l<count($each_sheet_content['ceils'][$k]); $l++){
$current_sheet->setCellValueByColumnAndRow($l, $k+2, $each_sheet_content['ceils'][$k][$l]);
}
}
}
}
//生成EXCEL并下载
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$excel_file.'-'.date('Y-m-d-H-i-s').'.xls"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');//自动下载
Yii::app()->end();
//恢复Yii自动加载功能
spl_autoload_register(array('YiiBase','autoload'));
}
该类自动生成EXCEL文件并下载,下面附带导出功能的测试代码:
//数据库导出为EXCEL示例
$siteDb = new SiteModel();
$return =$siteDb -> testMysql();
$excel_data = $this -> excelDataFormat($return);//此处使用了上篇文章中说道的数据格式化类
$excel_title = $excel_data['excel_title'];
$excel_ceils = $excel_data['excel_ceils'];
$excel_content = array(
array(
'sheet_name' => '测试1',
'sheet_title' => $excel_title ,
'ceils' => $excel_ceils ,
),
array(
'sheet_name' => '测试2',
'sheet_title' => $excel_title ,
'ceils' => $excel_ceils ,
),
);
$excel_file='test';
$this->exportExcel($excel_content, $excel_file);
到此简单的PHPEXCEL导出类整合进入YII就完成了。
相关文章推荐
- ThinkPHP 整合 PHPExcel ,数据导出功能实现,解决Invalid cell coordinate PHPExcel想必大家都不陌生,是用来操作Office Excel 文档的一个PHP
- YII中整合PHPEXCEL进行数据导入MYSQL数据库
- 利用phpExcel进行数据导出
- 在MS CRM中使用Excel导入/导出的功能对数据进行批量处理
- 在YII中使用PHPExcel扩展导出数据到EXCEL中
- thinkphp3.1(3.2同理)整合phpExcl 实现数据导出功能
- JAVA整合Flex导出数据库中的数据
- 利用Python进行数据分析——数据导入导出
- JAVA整合Flex导出数据库中的数据 (续)
- 使用Transact-SQL进行数据导入导出方法详
- java、Extjs导出数据库里的数据至Excel并下载至本地进行数据备份方法之二——使用Action
- VB将MSHFlexGrid数据导出到Excel文件通用功能
- CodeIgniter+PHPExcel 导出数据为Excel文件
- 用 IBM WebSphere DataStage 进行数据整合(2)
- 使用Spring整合Hibernate,并实现对数据表的增、删、改、查的功能
- 使用PHPExcel导出数据
- 使用XML&XSL替代OWC进行数据导出为EXCEL
- thinkphp使用view的时候无法利用phpexcel导出数据问题的解决
- ASP.NET实现增删改查等功能(Access版)系统之六-导出数据到EXCEL