YII中整合PHPEXCEL进行数据导出功能

     在做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就完成了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值