• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】

    本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

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

    您可能感兴趣的文章:
    • Yii框架中使用PHPExcel的方法分析
    • yii框架redis结合php实现秒杀效果(实例代码)
    • 详解PHP的Yii框架中扩展的安装与使用
    • 详解PHP的Yii框架中自带的前端资源包的使用
    • php中yii框架实例用法
    上一篇:Yii Framework框架使用PHPExcel组件的方法示例
    下一篇:PHP保留两位小数的几种方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

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