laravel框架集成PHPExcel讲解及demo

来源:互联网 发布:手机网络初始化失败 编辑:程序博客网 时间:2024/06/05 20:08

      首先,由于业务需求,需要把一些数据用excel导出,给硬件人员看。由于我自己用的是laravel 的一键安装包,所以使用laravel自带的Excel就成为了一种奢望。因此,这里使用PHPExcel,这个通用性较强的第三方。

一、下载并引入到项目中

1、先去PHPExcel官网下载,直接去gitHub上下载即可。地址:
https://github.com/PHPOffice/PHPExcel

2、将下载好的文件引进我们的项目

这里写图片描述

关于laravel引入第三方库的方法:
http://blog.csdn.net/ljfphp/article/details/78546179

3、将关键代码引入控制器方法中

//这里使用base_path()方法获取项目根目录,然后引入文件。   require_once(base_path() . '/app/Libs/PHPExcel/Classes/PHPExcel.php');   //    require_once(base_path() . '/app/Libs/PHPExcel/Classes/PHPExcel/Writer/Excel2007.php');

二、实际demo

  //PHPExcel带出excel表格  public function test_export(Request $request){    require_once(base_path() . '/app/Libs/PHPExcel/Classes/PHPExcel.php');    require_once(base_path() . '/app/Libs/PHPExcel/Classes/PHPExcel/Writer/Excel2007.php');    //要输出的数据,二维数组    $datas = array(      array('王城', '男', '18', '1997-03-13', '18948348924'),      array('李飞虹', '男', '21', '1994-06-13', '159481838924'),      array('王芸', '女', '18', '1997-03-13', '18648313924'),      array('郭瑞', '男', '17', '1998-04-13', '15543248924'),      array('李晓霞', '女', '19', '1996-06-13', '18748348924'),    );    // 创建一个excel    $objPHPExcel = new \PHPExcel();    //设置文件创建人,文件名,以及excel表格的表头部分    $objPHPExcel->getProperties()->setCreator("金峰兄")->setLastModifiedBy("金峰兄")->setTitle("金峰兄")->setSubject("金峰兄")->setDescription("金峰兄")->setKeywords("金峰兄")->setCategory("金峰兄");    $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', '名字')->setCellValue('B1', '性别')->setCellValue('C1', '年龄')->setCellValue('D1', '出生日期')->setCellValue('E1', '电话号码');    // 表格的标题    $objPHPExcel->getActiveSheet()->setTitle('金峰兄-' . date('Y-m-d'));    //设置当前的表格,也就是第一行的表格    $objPHPExcel->setActiveSheetIndex(0);    //设置所有表格的默认高度    $objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(15);    //循环赋值,填充表格      foreach ($datas as $k=>$data) {        //由于$k是键名,是从0开始的,而我们的表格的正式内容的第一行是表头部分,比如:姓名,年龄等        //所以这边的 A.($k+2)代表的是A2的内容,相当于都从第二行开始填充        $objPHPExcel->getActiveSheet()->setCellValue('A' . ($k+2), $data[0])->getStyle('A' . ($k+2))->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::VERTICAL_CENTER);        $objPHPExcel->getActiveSheet()->setCellValue('B' . ($k+2), $data[1]);        $objPHPExcel->getActiveSheet()->setCellValue('C' . ($k+2), $data[2]);        $objPHPExcel->getActiveSheet()->setCellValueExplicit('D' . ($k+2), $data[3], \PHPExcel_Cell_DataType::TYPE_STRING);        $objPHPExcel->getActiveSheet()->getStyle('D' . ($k+2))->getNumberFormat()->setFormatCode("@");        // 设置文本格式        $objPHPExcel->getActiveSheet()->setCellValueExplicit('E' . ($k+2), $data[4], \PHPExcel_Cell_DataType::TYPE_STRING);        $objPHPExcel->getActiveSheet()->getStyle('E' . ($k+2))->getAlignment()->setWrapText(true);      //}    }    //这边可以打印下,就可以看到我们已经把数组的内容放到excel对象中了    /*    var_dump($objPHPExcel);      exit;*/    $objActSheet = $objPHPExcel->getActiveSheet();    // 设置CELL填充颜色    $cell_fill = array(      'A1',      'B1',      'C1',      'D1',      'E1',    );    // TODO 加注释    //设置格式    foreach($cell_fill as $cell_fill_val){      $cellstyle = $objActSheet->getStyle($cell_fill_val);      $cellstyle->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT)->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);      // 字体格式,中间的14代表了字体的大小      $cellstyle->getFont()->setSize(14)->setBold(true);      // 边框格式      $cellstyle->getBorders()->getTop()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN)->getColor()->setARGB('FFFF0000');      $cellstyle->getBorders()->getBottom()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN)->getColor()->setARGB('FFFF0000');      $cellstyle->getBorders()->getLeft()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN)->getColor()->setARGB('FFFF0000');      $cellstyle->getBorders()->getRight()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN)->getColor()->setARGB('FFFF0000');    }    //设置第一行单元格高度    $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(30);    //设置单元格的宽度    $objActSheet->getColumnDimension('A')->setWidth(18.5);    $objActSheet->getColumnDimension('B')->setWidth(23.5);    $objActSheet->getColumnDimension('C')->setWidth(12);    $objActSheet->getColumnDimension('D')->setWidth(12);    $objActSheet->getColumnDimension('E')->setWidth(12);    $filename = '峰兄的测试表格';    ob_end_clean();//清除缓冲区,避免乱码    header('Content-Type: application/vnd.ms-excel');    header('Content-Disposition: attachment;filename="'.$filename.'.xls"');    header('Cache-Control: max-age=0');    // 如果是在ie9浏览器下,需要用到这个    header('Cache-Control: max-age=1');    // 如果你是在ie浏览器或者https下,需要用到这个    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past    header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified    header('Cache-Control: cache, must-revalidate'); // HTTP/1.1    header('Pragma: public'); // HTTP/1.0    $objWriter = new \PHPExcel_Writer_Excel5($objPHPExcel);    $objWriter->save('php://output');  }

这段代码是经过我测试的,大家可以直接粘贴下来,先在本地跑一下,看看生成的文件。然后再仔细的看一下注释,解释的挺清楚的。

具体可参考PHPExcel中文手册:
http://www.jquerycn.cn/a_17115

三、成功演示

这里写图片描述

      这就是我本地测试生成的excel文件,确实是成功了。当然,实际使用中,数据是需要我们自己查询,然后转换为数组的,这个就需要大家根据自己的逻辑来写了。

end

原创粉丝点击