香港高速VIP云机房火爆上线啦!无需备案,开通即用!配套《巅云自助建站系统3.0》将带给您飞一般的可视化拖拽建站体验,欢迎免费体验。

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

一佰互联网站制作(www.yinxi.net) 发布日期 2019-04-25 14:41:30 浏览数: 98

最近在研究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开发和域名注册及虚拟主机服务经验,提供的自助建站服务更是全国有名。近年来还整合团队优势自主开发了可视化多用户”巅云建站系统“3.0平台版,拖拽排版网站制作设计,轻松实现pc站、手机微网站、小程序、APP一体化全网营销网站建设 ,已成功的为全国上百家网络公司提供自助建站平台搭建服务。

相关新闻more

11
05月
专业网站设计公司,成功者首选的建站公司

当投资者们对于建立自己的网站来作为宣传自己产品最好的办法的时候,越来越多的建站公司就纷纷的建立了起来,作为建站公司中的老牌建站公司,专业网站... >>详情

13
05月
SEO优化应该注意网站不收录的几种因素_巅云

网站为什么不收录,网站为什么收录这么少的问题,其实网站的收录并不与排名有直接的联系,那么一起来分析下网站不收录的因素有哪些? 第一、层级 ... >>详情

17
03月
建站宝盒建站视频教程大集合!自助建站教程

建站宝盒操作技巧FLASH动画演示教程,建站宝盒建站视频教程大集合!自助建站教程请点击需要了解的视频名称进入观看:快速入门教程系统操作初始化... >>详情

22
04月
Linux两台服务器之间传输文件和文件夹操作

今天处理一个项目要迁移的问题,突然发现这么多图片怎么移过去,可能第一时间想到的是先从这台服务器下载下来,然后再上传到另外一台服务器上面去,这... >>详情

营业执照. cdn加速服务 备案系统认证 网络安全协会 我们的支付方式AAA认证
上海 北京 深圳 广州 天津 杭州 南京 武汉 成都 沈阳 大连 长沙 济南 青岛 苏州 福州 无锡 哈尔滨 宁波 重庆 大庆 厦门 西安 长春 珠海 郑州 海口 昆明 太原 石家庄 温州 合肥 乌鲁木齐 南宁 南通 合肥 兰州 呼和浩特 贵阳 烟台 秦皇岛 包头 唐山 银川 汕头 连云港 威海 西宁 湛江 北海 万州 涪陵 长寿 黔江 永川 丰都 忠县 江津 南川 开县 云阳 万盛 梁平 垫江 巫山 城口 建站宝盒 免费建站 门户网站建设 微信网站 手机网站 门户网站制作

7x24小时服务电话:18581389571 传真:023-85725751 免费建站交流群:236412099 139947842(自助建站交流) E-Mail:post@yinxi.net 网站投诉:
重庆楚捷科技有限公司 一佰互联©版权所有 自助建站(www.yinxi.net,Inc.) 2001-2020 All Rights Reserved 本站程序受法律保护,网站法律顾问:ITLAW-庄毅雄律师
中华人民共和国信息产业部网站备案号:渝ICP备12000592号