在thinkPHP3.2版本中应用

下载

官网下载phpExcel插件:

导入

ThinkPHP特意提供了导入第三方类库的功能,直接把PHPExcel放到vendor目录下:
image.png

引用

使用时用vendor方法引入:
image.png

备注

使用PHPExcel时报错:Class ‘Admin\Action\PHPExcel’ not found
因为框架内部引入部分把引入的内容因为 ‘import()’ 的问题,import()默认会给文件添加 ‘.class.php’的后缀。同时将 ‘.’ 替换为 ‘/‘,导致文件路径也解析错误。

解决方法为使用类名的时候前面加上一个’\’;

  1. vendor("PHPExcel.PHPExcel");
  2. $objPHPExcel = new \PHPExcel();

使用

demo:

  1. <?php
  2. $datas = array(
  3. array('王城', '男', '18', '1997-03-13', '18948348924'),
  4. array('李飞虹', '男', '21', '1994-06-13', '159481838924'),
  5. array('王芸', '女', '18', '1997-03-13', '18648313924'),
  6. array('郭瑞', '男', '17', '1998-04-13', '15543248924'),
  7. array('李晓霞', '女', '19', '1996-06-13', '18748348924'),
  8. );
  9. vendor("PHPExcel.PHPExcel");
  10. // 创建一个excel
  11. $objPHPExcel = new PHPExcel();
  12. // 设置文档属性信息
  13. $objPHPExcel->getProperties()
  14. ->setCreator("Phpmarker")
  15. ->setLastModifiedBy("Phpmarker")
  16. ->setTitle("Phpmarker")
  17. ->setSubject("Phpmarker")
  18. ->setDescription("Phpmarker")
  19. ->setKeywords("Phpmarker")
  20. ->setCategory("Phpmarker");
  21. //将活动工作表索引设置为第一个工作表,以便Excel将其作为第一个工作表打开
  22. //并设置表头
  23. $objPHPExcel->setActiveSheetIndex(0)
  24. ->setCellValue('A1', '名字')
  25. ->setCellValue('B1', '性别')
  26. ->setCellValue('C1', '年龄')
  27. ->setCellValue('D1', '出生日期')
  28. ->setCellValue('E1', '电话号码');
  29. //获取当前活动表
  30. $sheet = $objPHPExcel->getActiveSheet();
  31. // 设置工作表名称
  32. $sheet->setTitle('Phpmarker-' . date('Y-m-d'));
  33. //设置行高
  34. $sheet->getDefaultRowDimension()->setRowHeight(15);
  35. //锁定表头
  36. $sheet->freezePane('A2');
  37. //循环写入数据
  38. $i = 2;
  39. foreach($datas as $data){
  40. $sheet->setCellValue('A' . $i, $data[0])
  41. ->getStyle('A'.$i)->getAlignment()
  42. ->setHorizontal(PHPExcel_Style_Alignment::VERTICAL_CENTER);
  43. $sheet->setCellValue('B' . $i, $data[1]);
  44. $sheet->setCellValue('C' . $i, $data[2]);
  45. $sheet->setCellValueExplicit('D'. $i, $data[3],PHPExcel_Cell_DataType::TYPE_STRING);
  46. $sheet->getStyle('D' . $i)
  47. ->getNumberFormat()
  48. ->setFormatCode("@");
  49. // 设置文本格式
  50. $sheet->setCellValueExplicit('E'. $i, $data[4],PHPExcel_Cell_DataType::TYPE_STRING);
  51. $sheet->getStyle('E' . $i)->getAlignment()->setWrapText(true);
  52. $i ;
  53. }
  54. $objActSheet = $objPHPExcel->getActiveSheet();
  55. // 设置CELL填充颜色
  56. $cell_fill = array(
  57. 'A1',
  58. 'B1',
  59. 'C1',
  60. 'D1',
  61. 'E1',
  62. );
  63. foreach($cell_fill as $cell_fill_val){
  64. $cellstyle = $objActSheet->getStyle($cell_fill_val);
  65. // background
  66. // $cellstyle->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setARGB('fafa00');
  67. // set align
  68. $cellstyle->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT)->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
  69. // font
  70. $cellstyle->getFont()->setSize(12)->setBold(true);
  71. // border
  72. $cellstyle->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN)->getColor()->setARGB('FFFF0000');
  73. $cellstyle->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN)->getColor()->setARGB('FFFF0000');
  74. $cellstyle->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN)->getColor()->setARGB('FFFF0000');
  75. $cellstyle->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN)->getColor()->setARGB('FFFF0000');
  76. }
  77. $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(30);
  78. $objActSheet->getColumnDimension('A')->setWidth(18.5);
  79. $objActSheet->getColumnDimension('B')->setWidth(23.5);
  80. $objActSheet->getColumnDimension('C')->setWidth(12);
  81. $objActSheet->getColumnDimension('D')->setWidth(12);
  82. $objActSheet->getColumnDimension('E')->setWidth(12);
  83. $filename = '2015030423';
  84. ob_end_clean();//清除缓冲区,避免乱码
  85. header('Content-Type: application/vnd.ms-excel');
  86. header('Content-Disposition: attachment;filename="'.$filename.'.xls"');
  87. header('Cache-Control: max-age=0');
  88. // If you're serving to IE 9, then the following may be needed
  89. header('Cache-Control: max-age=1');
  90. // If you're serving to IE over SSL, then the following may be needed
  91. header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
  92. header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
  93. header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
  94. header('Pragma: public'); // HTTP/1.0
  95. $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
  96. $objWriter->save('php://output');
  97. ?>

常用配置及操作

  1. // 创建一个excel
  2. $objPHPExcel = new \PHPExcel();
  3. //设置当前活动表并设置表头
  4. $objPHPExcel->setActiveSheetIndex(0)
  5. ->setCellValue('A1', '姓名')
  6. ->setCellValue('B2', '年龄')
  7. ->setCellValue('C2', '性别')
  8. //获取当前活动表
  9. $firstSheet = $objPHPExcel->getActiveSheet();
  10. //设置工作表名称
  11. $firstSheet->setTitle('漏洞数量统计');
  12. //合并单元格
  13. $firstSheet->mergeCells('A1:E1');
  14. //分离单元格
  15. $firstSheet->unmergeCells('A28:B28');
  16. //设置列宽
  17. $firstSheet->getColumnDimension('A')->setWidth(30);
  18. $firstSheet->getColumnDimension('B')->setWidth(20);
  19. $firstSheet->getColumnDimension('C')->setWidth(20);
  20. //填充单元格背景色
  21. $firstSheet->getStyle('A2:C2')
  22. ->getFill()
  23. ->setFillType(\PHPExcel_Style_Fill::FILL_SOLID)
  24. ->getStartColor()
  25. ->setRGB('4F81BD');
  26. //设置居中
  27. $firstSheet->getStyle('A1:C3')
  28. ->getAlignment()
  29. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  30. //垂直居中
  31. $firstSheet->getStyle('A18')
  32. ->getAlignment()
  33. ->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
  34. //设置字体颜色
  35. $firstSheet->getStyle('A2:C2')->getFont()->getColor()->setRGB('FFFFFF');
  36. //设置字体
  37. $firstSheet->getStyle('A2:'.$endCol.'2')->getFont()->setName('宋体');
  38. //字体加粗
  39. $firstSheet->getStyle('A1')->getFont()->setName('宋体')->setBold(true);
  40. //设置边框
  41. $styleThinBlackBorder = array(
  42. 'borders' => array (
  43. 'allborders' => array (
  44. 'style' => \PHPExcel_Style_Border::BORDER_THIN, //设置border样式
  45. 'color' => array ('rgb' => '000000'), //设置border颜色
  46. ),
  47. ),
  48. );
  49. $firstSheet->getStyle( 'A1:C5')->applyFromArray($styleThinBlackBorder);