在thinkPHP3.2版本中应用
下载
官网下载phpExcel插件:
导入
ThinkPHP特意提供了导入第三方类库的功能,直接把PHPExcel放到vendor目录下:
引用
使用时用vendor方法引入:
备注
使用PHPExcel时报错:Class ‘Admin\Action\PHPExcel’ not found
因为框架内部引入部分把引入的内容因为 ‘import()’ 的问题,import()默认会给文件添加 ‘.class.php’的后缀。同时将 ‘.’ 替换为 ‘/‘,导致文件路径也解析错误。
解决方法为使用类名的时候前面加上一个’\’;
vendor("PHPExcel.PHPExcel");$objPHPExcel = new \PHPExcel();
使用
demo:
<?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'),);vendor("PHPExcel.PHPExcel");// 创建一个excel$objPHPExcel = new PHPExcel();// 设置文档属性信息$objPHPExcel->getProperties()->setCreator("Phpmarker")->setLastModifiedBy("Phpmarker")->setTitle("Phpmarker")->setSubject("Phpmarker")->setDescription("Phpmarker")->setKeywords("Phpmarker")->setCategory("Phpmarker");//将活动工作表索引设置为第一个工作表,以便Excel将其作为第一个工作表打开//并设置表头$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', '名字')->setCellValue('B1', '性别')->setCellValue('C1', '年龄')->setCellValue('D1', '出生日期')->setCellValue('E1', '电话号码');//获取当前活动表$sheet = $objPHPExcel->getActiveSheet();// 设置工作表名称$sheet->setTitle('Phpmarker-' . date('Y-m-d'));//设置行高$sheet->getDefaultRowDimension()->setRowHeight(15);//锁定表头$sheet->freezePane('A2');//循环写入数据$i = 2;foreach($datas as $data){$sheet->setCellValue('A' . $i, $data[0])->getStyle('A'.$i)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::VERTICAL_CENTER);$sheet->setCellValue('B' . $i, $data[1]);$sheet->setCellValue('C' . $i, $data[2]);$sheet->setCellValueExplicit('D'. $i, $data[3],PHPExcel_Cell_DataType::TYPE_STRING);$sheet->getStyle('D' . $i)->getNumberFormat()->setFormatCode("@");// 设置文本格式$sheet->setCellValueExplicit('E'. $i, $data[4],PHPExcel_Cell_DataType::TYPE_STRING);$sheet->getStyle('E' . $i)->getAlignment()->setWrapText(true);$i ;}$objActSheet = $objPHPExcel->getActiveSheet();// 设置CELL填充颜色$cell_fill = array('A1','B1','C1','D1','E1',);foreach($cell_fill as $cell_fill_val){$cellstyle = $objActSheet->getStyle($cell_fill_val);// background// $cellstyle->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setARGB('fafa00');// set align$cellstyle->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT)->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);// font$cellstyle->getFont()->setSize(12)->setBold(true);// border$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 = '2015030423';ob_end_clean();//清除缓冲区,避免乱码header('Content-Type: application/vnd.ms-excel');header('Content-Disposition: attachment;filename="'.$filename.'.xls"');header('Cache-Control: max-age=0');// If you're serving to IE 9, then the following may be neededheader('Cache-Control: max-age=1');// If you're serving to IE over SSL, then the following may be neededheader('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the pastheader('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modifiedheader('Cache-Control: cache, must-revalidate'); // HTTP/1.1header('Pragma: public'); // HTTP/1.0$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);$objWriter->save('php://output');?>
常用配置及操作
// 创建一个excel$objPHPExcel = new \PHPExcel();//设置当前活动表并设置表头$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', '姓名')->setCellValue('B2', '年龄')->setCellValue('C2', '性别')//获取当前活动表$firstSheet = $objPHPExcel->getActiveSheet();//设置工作表名称$firstSheet->setTitle('漏洞数量统计');//合并单元格$firstSheet->mergeCells('A1:E1');//分离单元格$firstSheet->unmergeCells('A28:B28');//设置列宽$firstSheet->getColumnDimension('A')->setWidth(30);$firstSheet->getColumnDimension('B')->setWidth(20);$firstSheet->getColumnDimension('C')->setWidth(20);//填充单元格背景色$firstSheet->getStyle('A2:C2')->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setRGB('4F81BD');//设置居中$firstSheet->getStyle('A1:C3')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//垂直居中$firstSheet->getStyle('A18')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);//设置字体颜色$firstSheet->getStyle('A2:C2')->getFont()->getColor()->setRGB('FFFFFF');//设置字体$firstSheet->getStyle('A2:'.$endCol.'2')->getFont()->setName('宋体');//字体加粗$firstSheet->getStyle('A1')->getFont()->setName('宋体')->setBold(true);//设置边框$styleThinBlackBorder = array('borders' => array ('allborders' => array ('style' => \PHPExcel_Style_Border::BORDER_THIN, //设置border样式'color' => array ('rgb' => '000000'), //设置border颜色),),);$firstSheet->getStyle( 'A1:C5')->applyFromArray($styleThinBlackBorder);
