Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】


Posted in PHP onJuly 24, 2019

本文实例讲述了Yii框架使用PHPExcel导出Excel文件的方法。分享给大家供大家参考,具体如下:

最近在研究PHP的Yii框架,很喜欢,碰到导出Excel的问题,研究了一下,就有了下面的方法:

1、首先在config\main.php中添加对PHPExcel的引用,我的方式是这样:

// autoloading model and component classes
'import'=>array(
    /*'application.modules.srbac.controllers.SBaseController',*/
    'application.models.*',
    'application.components.*',
    'application.extensions.phpexcel.*',
),

另外也有人用components 这个配置,但是我的有问题,所以就用上面的方法。

2、按照下面的代码修改PHPExcel代码目录里的Autoloader.php文件:

public static function Register() {
    /*if (function_exists('__autoload')) {
      //  Register any existing autoloader function with SPL, so we don't get any clashes
      spl_autoload_register('__autoload');
    }
    //  Register ourselves with SPL
    return spl_autoload_register(array('PHPExcel_Autoloader', 'Load'));*/
    $functions = spl_autoload_functions();
      foreach ( $functions as $function)
        spl_autoload_unregister($function);
      $functions = array_merge(array(array('PHPExcel_Autoloader','Load')),$functions);
      foreach ( $functions as $function)
        $x = spl_autoload_register($function);
      return $x;
}  //  function Register()

上面的函数中,注释掉的是原有的代码。

3、下面的代码是输出Excel,以及一些常用的属性设置,在你的controller中:

/*
导出为Excel
*/
public function actionExport()
{
    $objectPHPExcel = new PHPExcel();
    $objectPHPExcel->setActiveSheetIndex(0);
    $page_size = 52;
    //数据的取出
    $model = Yii::app()->session['printdata'];
    $dataProvider = $model->search();
    $dataProvider->setPagination(false);
    $data = $dataProvider->getData();
    $count = $dataProvider->getTotalItemCount();
    //总页数的算出
    $page_count = (int)($count/$page_size) +1;
    $current_page = 0;
    $n = 0;
    foreach ( $data as $product )
    {
      if ( $n % $page_size === 0 )
      {
        $current_page = $current_page +1;
        //报表头的输出
        $objectPHPExcel->getActiveSheet()->mergeCells('B1:G1');
        $objectPHPExcel->getActiveSheet()->setCellValue('B1','产品信息表');
        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue('B2','产品信息表');
        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue('B2','产品信息表');
        $objectPHPExcel->setActiveSheetIndex(0)->getStyle('B1')->getFont()->setSize(24);
        $objectPHPExcel->setActiveSheetIndex(0)->getStyle('B1')
          ->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue('B2','日期:'.date("Y年m月j日"));
        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue('G2','第'.$current_page.'/'.$page_count.'页');
        $objectPHPExcel->setActiveSheetIndex(0)->getStyle('G2')
          ->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
        //表格头的输出
        $objectPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(5);
        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue('B3','编号');
        $objectPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(6.5);
        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue('C3','名称');
        $objectPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(17);
        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue('D3','生产厂家');
        $objectPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(22);
        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue('E3','单位');
        $objectPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(15);
        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue('F3','单价');
        $objectPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(15);
        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue('G3','在库数');
        $objectPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(15);
        //设置居中
        $objectPHPExcel->getActiveSheet()->getStyle('B3:G3')
          ->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        //设置边框
        $objectPHPExcel->getActiveSheet()->getStyle('B3:G3' )
          ->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
        $objectPHPExcel->getActiveSheet()->getStyle('B3:G3' )
          ->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
        $objectPHPExcel->getActiveSheet()->getStyle('B3:G3' )
          ->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
        $objectPHPExcel->getActiveSheet()->getStyle('B3:G3' )
          ->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
        $objectPHPExcel->getActiveSheet()->getStyle('B3:G3' )
          ->getBorders()->getVertical()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
        //设置颜色
        $objectPHPExcel->getActiveSheet()->getStyle('B3:G3')->getFill()
          ->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setARGB('FF66CCCC');
      }
      //明细的输出
      $objectPHPExcel->getActiveSheet()->setCellValue('B'.($n+4) ,$product->id);
      $objectPHPExcel->getActiveSheet()->setCellValue('C'.($n+4) ,$product->product_name);
      $objectPHPExcel->getActiveSheet()->setCellValue('D'.($n+4) ,$product->product_agent->name);
      $objectPHPExcel->getActiveSheet()->setCellValue('E'.($n+4) ,$product->unit);
      $objectPHPExcel->getActiveSheet()->setCellValue('F'.($n+4) ,$product->unit_price);
      $objectPHPExcel->getActiveSheet()->setCellValue('G'.($n+4) ,$product->library_count);
      //设置边框
      $currentRowNum = $n+4;
      $objectPHPExcel->getActiveSheet()->getStyle('B'.($n+4).':G'.$currentRowNum )
          ->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
      $objectPHPExcel->getActiveSheet()->getStyle('B'.($n+4).':G'.$currentRowNum )
          ->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
      $objectPHPExcel->getActiveSheet()->getStyle('B'.($n+4).':G'.$currentRowNum )
          ->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
      $objectPHPExcel->getActiveSheet()->getStyle('B'.($n+4).':G'.$currentRowNum )
          ->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
      $objectPHPExcel->getActiveSheet()->getStyle('B'.($n+4).':G'.$currentRowNum )
          ->getBorders()->getVertical()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
      $n = $n +1;
    }
    //设置分页显示
    //$objectPHPExcel->getActiveSheet()->setBreak( 'I55' , PHPExcel_Worksheet::BREAK_ROW );
    //$objectPHPExcel->getActiveSheet()->setBreak( 'I10' , PHPExcel_Worksheet::BREAK_COLUMN );
    $objectPHPExcel->getActiveSheet()->getPageSetup()->setHorizontalCentered(true);
    $objectPHPExcel->getActiveSheet()->getPageSetup()->setVerticalCentered(false);
    ob_end_clean();
    ob_start();
    header('Content-Type : application/vnd.ms-excel');
    header('Content-Disposition:attachment;filename="'.'产品信息表-'.date("Y年m月j日").'.xls"');
    $objWriter= PHPExcel_IOFactory::createWriter($objectPHPExcel,'Excel5');
    $objWriter->save('php://output');
}

代码执行后,会直接生成Excel,并提示下载或打开。

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
发挥语言的威力--融合PHP与ASP
Oct 09 PHP
PHP控制网页过期时间的代码
Sep 28 PHP
一周让你学会PHP 不错的学习资料
Feb 06 PHP
php修改时间格式的代码
May 29 PHP
php判断电脑访问、手机访问的例子
May 10 PHP
学习php中的正则表达式
Aug 17 PHP
利用PHP绘图函数实现简单验证码功能的方法
Oct 18 PHP
PHP连接MySQL进行增、删、改、查操作
Feb 19 PHP
php判断电子邮件是否正确方法
Dec 04 PHP
PHP-FPM和Nginx的通信机制详解
Feb 01 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
Jan 23 PHP
php变量与字符串的增删改查操作示例
May 07 PHP
Yii Framework框架使用PHPExcel组件的方法示例
Jul 24 #PHP
PHP+Apache实现二级域名之间共享cookie的方法
Jul 24 #PHP
PHP容器类的两种实现方式示例
Jul 24 #PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
Jul 24 #PHP
thinkphp5.1框架容器与依赖注入实例分析
Jul 23 #PHP
Thinkphp5 自定义上传文件名的实现方法
Jul 23 #PHP
PHP中__set()实例用法和基础讲解
Jul 23 #PHP
You might like
php 无限级缓存的类的扩展
2009/03/16 PHP
php反弹shell实现代码
2009/04/22 PHP
深入理解PHP中的Session和Cookie
2013/06/21 PHP
php调用mysql存储过程实例分析
2014/12/29 PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
2015/10/21 PHP
WordPress中制作导航菜单的PHP核心方法讲解
2015/12/11 PHP
jquery 动态创建元素的方式介绍及应用
2013/04/21 Javascript
使图片旋转的3种解决方案
2013/11/21 Javascript
javascript跨域的4种方法和原理详解
2014/04/08 Javascript
JavaScript实现数字数组正序排列的方法
2015/04/06 Javascript
jquery分隔Url的param方法(推荐)
2016/05/25 Javascript
利用Javascript实现BMI计算器
2016/08/16 Javascript
JavaScript中常用的验证reg
2016/10/13 Javascript
Kendo Grid editing 自定义验证报错提示的解决方法
2016/11/18 Javascript
jquery编写日期选择器
2017/03/16 Javascript
vue ssr 指南详读
2018/06/29 Javascript
js+html5实现手机九宫格密码解锁功能
2018/07/30 Javascript
VUE2.0+ElementUI2.0表格el-table循环动态列渲染的写法详解
2018/11/30 Javascript
javascript sort()对数组中的元素进行排序详解
2019/10/13 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
一份python入门应该看的学习资料
2018/04/11 Python
python 爬取学信网登录页面的例子
2019/08/13 Python
html5 更新图片颜色示例代码
2014/07/29 HTML / CSS
美国羊皮公司:Overland
2018/01/15 全球购物
jurlique茱莉蔻英国官网:澳洲天然护肤品
2018/08/03 全球购物
Three Graces London官网:英国奢侈品牌
2021/03/18 全球购物
美国在线肉类和海鲜配送:Crowd Cow
2020/10/02 全球购物
幼儿教育感言
2014/02/05 职场文书
政府绩效管理实施方案
2014/05/04 职场文书
关于运动会的口号
2014/06/07 职场文书
监守自盗观后感
2015/06/10 职场文书
党员干部学习心得体会
2016/01/23 职场文书
幼儿园教师辞职信
2019/06/21 职场文书
导游词之安徽巢湖
2019/12/26 职场文书
Python之基础函数案例详解
2021/08/30 Python
Java十分钟精通进阶适配器模式
2022/04/06 Java/Android