Yii2框架中使用PHPExcel导出Excel文件的示例


Posted in PHP onAugust 09, 2017

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

最简单的利用composer安装

composer require "phpoffice/phpexcel": "*"

如果没有安装conposer可以参考下面1.2步

1、引入PHPExcel

首先得要下载phpexcel地址:https://github.com/PHPOffice/PHPExcel/archive/1.8.1.zip

你可以直接在入口文件index.php中引入,也可以在你定义的controller类之前,只要是在你使用之前引入就可以

require dirname(dirname(__FILE__)).'/excel/PHPExcel.php';

或者在phpexcel类里修改相应的namespace也可。

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

public static function Register() {
  $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;
}

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

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

public function actionExport()
{
    $objectPHPExcel = new PHPExcel();
    $objectPHPExcel->setActiveSheetIndex(0);
  
    $page_size = 52;
    $model = new NewsSearch();
    $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,并提示下载或打开。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php设计模式 Composite (组合模式)
Jun 26 PHP
php在数据库抽象层简单使用PDO的方法
Nov 03 PHP
php+ajax实现无刷新分页
Nov 18 PHP
简介PHP的Yii框架中缓存的一些高级用法
Mar 29 PHP
PHP实现的DES加密解密实例代码
Apr 06 PHP
php验证身份证号码正确性的函数
Jul 20 PHP
thinkphp 验证码 的使用小结
May 07 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
Jun 09 PHP
Laravel网站打开速度优化的方法汇总
Jul 16 PHP
PHP接口继承及接口多继承原理与实现方法详解
Oct 18 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
Dec 26 PHP
在 Laravel 中动态隐藏 API 字段的方法
Oct 25 PHP
PHP实现更改hosts文件的方法示例
Aug 08 #PHP
PHP编程实现阳历转换为阴历的方法实例
Aug 08 #PHP
PHP数据分析引擎计算余弦相似度算法示例
Aug 08 #PHP
Eclipse PHPEclipse 配置的具体步骤
Aug 08 #PHP
PHP 文件锁与进程锁的使用示例
Aug 07 #PHP
PHP实现找出有序数组中绝对值最小的数算法分析
Aug 07 #PHP
php基于session锁防止阻塞请求的方法分析
Aug 07 #PHP
You might like
PHP mkdir()定义和用法
2009/01/14 PHP
关于php 接口问题(php接口主要也就是运用curl,curl函数)
2013/07/01 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
2016/03/29 PHP
PHP智能识别收货地址信息实例
2019/01/05 PHP
详解php反序列化
2020/06/10 PHP
自己开发Dojo的建议框架
2008/09/24 Javascript
JS Excel读取和写入操作(模板操作)实现代码
2010/04/11 Javascript
ASP.NET jQuery 实例12 通过使用jQuery validation插件简单实现用户注册页面验证功能
2012/02/03 Javascript
js字符串转换成数字与数字转换成字符串的实现方法
2014/01/08 Javascript
form.submit()不能提交表单的原因分析
2014/10/23 Javascript
JQuery设置时间段下拉选择实例
2014/12/30 Javascript
原生javascript实现解析XML文档与字符串
2016/03/01 Javascript
js 截取或者替换字符串中的数字实现方法
2016/06/13 Javascript
vue2 自定义动态组件所遇到的问题
2017/06/08 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
2017/12/23 Javascript
vuex 多模块时 模块内部的mutation和action的调用方式
2020/07/24 Javascript
Vue 实现可视化拖拽页面编辑器
2021/02/01 Vue.js
Python中的Classes和Metaclasses详解
2015/04/02 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
2016/03/14 Python
浅谈python类属性的访问、设置和删除方法
2016/07/25 Python
python画柱状图--不同颜色并显示数值的方法
2018/12/13 Python
pycharm设置鼠标悬停查看方法设置
2019/07/29 Python
python同时遍历两个list用法说明
2020/05/02 Python
python3.4中清屏的处理方法
2020/07/06 Python
什么是索引指示器
2012/08/20 面试题
生产总经理岗位职责
2013/12/19 职场文书
人事部岗位职责范本
2014/03/05 职场文书
党员公开承诺事项
2014/03/25 职场文书
一年级评语大全
2014/04/23 职场文书
应届大学生自荐书
2014/06/17 职场文书
介绍信格式
2015/01/30 职场文书
后勤工作个人总结
2015/02/28 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
《我要的是葫芦》教学反思
2016/02/18 职场文书
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
2021/04/01 PHP
JDBC连接的六步实例代码(与mysql连接)
2021/05/12 MySQL