下载PHPExcel:http://phpexcel.codeplex.com
安装PHPExcel非常的简单,只需解压压缩包里的Classes文件夹中的内容到application\libraries\目录下即可,最终的目录结构如下:
�C application\libraries\PHPExcel.php
�C application\libraries\PHPExcel (文件夹)
但是由于CI的命名规则的约束,需要修改PHPExcel库中的类名以遵从CI中的类命名规则。打开application\libraries\PHPExcel\IOFactory.php 文件,将其类名从PHPExcel_IOFactory改为IOFactory,并将其构造函数改为public类型。
至此,PHPExcel库安装完毕。
在CI中写一个Controller实现导出功能
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
public
function export
(
)
{ $this -> load -> model ( "CourseInfo" , "CourseInfo" , TRUE ) ; $result = $this -> CourseInfo -> countCourseStuNumber ( ) ; // 清空输出缓冲区 ob_clean ( ) ; // 载入PHPExcel类库 $this -> load -> library ( 'PHPExcel' ) ; $this -> load -> library ( 'PHPExcel/IOFactory' ) ; // 创建PHPExcel对象 $objPHPExcel = new PHPExcel ( ) ; // 设置excel文件属性描述 $objPHPExcel -> getProperties ( ) -> setTitle ( "选课统计表" ) -> setDescription ( "选课统计表" ) ; // 设置当前工作表 $objPHPExcel -> setActiveSheetIndex ( 0 ) ; // 设置表头 $fields = array ( '节次' , '课程名称' , '开课老师' , '选课学生数' ) ; // 列编号从0开始,行编号从1开始 $col = 0 ; $row = 1 ; foreach ( $fields as $field ) { $objPHPExcel -> getActiveSheet ( ) -> setCellValueByColumnAndRow ( $col , $row , $field ) ; $col ++; } // 从第二行开始输出数据内容 $row = 2 ; foreach ( $result as $course ) { $objPHPExcel -> getActiveSheet ( ) -> setCellValueByColumnAndRow ( 0 , $row , $course [ "courseOrder" ] ) ; $objPHPExcel -> getActiveSheet ( ) -> setCellValueByColumnAndRow ( 1 , $row , $course [ "courseName" ] ) ; $objPHPExcel -> getActiveSheet ( ) -> setCellValueByColumnAndRow ( 2 , $row , $course [ "teacher" ] ) ; $objPHPExcel -> getActiveSheet ( ) -> setCellValueByColumnAndRow ( 3 , $row , $course [ "stuCount" ] ) ; $row ++; } //输出excel文件 $objPHPExcel -> setActiveSheetIndex ( 0 ) ; // 第二个参数可取值:CSV、Excel5(生成97-2003版的excel)、Excel2007(生成2007版excel) $objWriter = IOFactory :: createWriter ( $objPHPExcel , 'Excel5' ) ; // 设置HTTP头 header ( 'Content-Type: application/vnd.ms-excel; charset=utf-8' ) ; header ( 'Content-Disposition: attachment;filename="' . mb_convert_encoding ( "选课统计表" , "GB2312" , "UTF-8" ) . '.xls"' ) ; header ( 'Cache-Control: max-age=0' ) ; $objWriter -> save ( 'php://output' ) ; } |
1
2 |
// 清空输出缓冲区
ob_clean ( ) ; |
我翻看了网上许多例子,当中都是没有这句话的,但是如果不加这句话,生成的Excel文件很有可能是乱码文件,打开时提示的是文件格式无效。一开始我以为是编码问题,但是即使我将MySQL,CI,HTML页面,HTTP头信息等等所有相关的东西的编码都统一为UTF-8或GBK或GB2312,内容也都用iconv转码,还是一如既往的出现乱码,后来搞得我头都大了,一气之下生成一个空的没有任何内容的Excel文件,打开一看还是乱码,我才知道不是编码的问题。最后经过多方的查找,才知道是PHPExcel输出Excel文件时是将整个缓冲区中的内容写入到Excel文件,而此时如果缓冲区中在Excel文件之前还有其它内容,则会一起写入到Excel文件当中,导致Excel文件头中包含脏数据,故而打开时提示文件格式无效。所以切记,在生成Excel文件前,一定记得先清空一下输出缓冲区!!!
PHPExcel是个强大的类库,它所能做的不仅仅只有这些,更多的功能可以查看PHPExcel官方的文档,在这里我列出了一些常用的设置选项。
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
//创建人
$objPHPExcel -> getProperties ( ) -> setCreator (”Maarten Balliauw” ) ; //最后修改人 $objPHPExcel -> getProperties ( ) -> setLastModifiedBy (”Maarten Balliauw” ) ; //标题 $objPHPExcel -> getProperties ( ) -> setTitle (”Office 2007 XLSX Test Document” ) ; //题目 $objPHPExcel -> getProperties ( ) -> setSubject (”Office 2007 XLSX Test Document” ) ; //描述 $objPHPExcel -> getProperties ( ) -> setDescription (”Test document for Office 2007 XLSX , generated using PHP classes .” ) ; //关键字 $objPHPExcel -> getProperties ( ) -> setKeywords (”office 2007 openxml php” ) ; //种类 $objPHPExcel -> getProperties ( ) -> setCategory (”Test result file” ) ; //设置当前的sheet $objPHPExcel -> setActiveSheetIndex ( 0 ) ; //设置sheet的name $objPHPExcel -> getActiveSheet ( ) -> setTitle ( 'Simple' ) ; //设置单元格的值 $objPHPExcel -> getActiveSheet ( ) -> setCellValue ( 'A1' , 'String' ) ; $objPHPExcel -> getActiveSheet ( ) -> setCellValue ( 'A2' , 12 ) ; $objPHPExcel -> getActiveSheet ( ) -> setCellValue ( 'A3' , true ) ; $objPHPExcel -> getActiveSheet ( ) -> setCellValue ( 'C5' , '=SUM(C2:C4)' ) ; $objPHPExcel -> getActiveSheet ( ) -> setCellValue ( 'B8' , '=MIN(B2:C5)' ) ; //合并单元格 $objPHPExcel -> getActiveSheet ( ) -> mergeCells ( 'A18:E22' ) ; //分离单元格 $objPHPExcel -> getActiveSheet ( ) -> unmergeCells ( 'A28:B28' ) ; //保护cell $objPHPExcel -> getActiveSheet ( ) -> getProtection ( ) -> setSheet ( true ) ; // Needs to be set to true in order to enable any worksheet protection! $objPHPExcel -> getActiveSheet ( ) -> protectCells ( 'A3:E13' , 'PHPExcel' ) ; //设置格式 $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'E4' ) -> getNumberFormat ( ) -> setFormatCode (PHPExcel_Style_NumberFormat :: FORMAT_CURRENCY_EUR_SIMPLE ) ; $objPHPExcel -> getActiveSheet ( ) -> duplicateStyle ( $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'E4' ) , 'E5:E13' ) ; //设置宽width // Set column widths $objPHPExcel -> getActiveSheet ( ) -> getColumnDimension ( 'B' ) -> setAutoSize ( true ) ; $objPHPExcel -> getActiveSheet ( ) -> getColumnDimension ( 'D' ) -> setWidth ( 12 ) ; //设置font $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'B1' ) -> getFont ( ) -> setName ( 'Candara' ) ; $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'B1' ) -> getFont ( ) -> setSize ( 20 ) ; $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'B1' ) -> getFont ( ) -> setBold ( true ) ; $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'B1' ) -> getFont ( ) -> setUnderline (PHPExcel_Style_Font :: UNDERLINE_SINGLE ) ; $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'B1' ) -> getFont ( ) -> getColor ( ) -> setARGB (PHPExcel_Style_Color :: COLOR_WHITE ) ; $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'E1' ) -> getFont ( ) -> getColor ( ) -> setARGB (PHPExcel_Style_Color :: COLOR_WHITE ) ; $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'D13' ) -> getFont ( ) -> setBold ( true ) ; $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'E13' ) -> getFont ( ) -> setBold ( true ) ; //设置align $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'D11' ) -> getAlignment ( ) -> setHorizontal (PHPExcel_Style_Alignment :: HORIZONTAL_RIGHT ) ; $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'D12' ) -> getAlignment ( ) -> setHorizontal (PHPExcel_Style_Alignment :: HORIZONTAL_RIGHT ) ; $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'D13' ) -> getAlignment ( ) -> setHorizontal (PHPExcel_Style_Alignment :: HORIZONTAL_RIGHT ) ; $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'A18' ) -> getAlignment ( ) -> setHorizontal (PHPExcel_Style_Alignment :: HORIZONTAL_JUSTIFY ) ; //垂直居中 $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'A18' ) -> getAlignment ( ) -> setVertical (PHPExcel_Style_Alignment :: VERTICAL_CENTER ) ; //设置单元格边框 $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'A4' ) -> getBorders ( ) -> getTop ( ) -> setBorderStyle (PHPExcel_Style_Border :: BORDER_THIN ) ; $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'B4' ) -> getBorders ( ) -> getTop ( ) -> setBorderStyle (PHPExcel_Style_Border :: BORDER_THIN ) ; $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'C4' ) -> getBorders ( ) -> getTop ( ) -> setBorderStyle (PHPExcel_Style_Border :: BORDER_THIN ) ; $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'D4' ) -> getBorders ( ) -> getTop ( ) -> setBorderStyle (PHPExcel_Style_Border :: BORDER_THIN ) ; $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'E4' ) -> getBorders ( ) -> getTop ( ) -> setBorderStyle (PHPExcel_Style_Border :: BORDER_THIN ) ; //设置边框颜色 $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'D13' ) -> getBorders ( ) -> getLeft ( ) -> getColor ( ) -> setARGB ( 'FF993300' ) ; $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'D13' ) -> getBorders ( ) -> getTop ( ) -> getColor ( ) -> setARGB ( 'FF993300' ) ; $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'D13' ) -> getBorders ( ) -> getBottom ( ) -> getColor ( ) -> setARGB ( 'FF993300' ) ; $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'E13' ) -> getBorders ( ) -> getTop ( ) -> getColor ( ) -> setARGB ( 'FF993300' ) ; $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'E13' ) -> getBorders ( ) -> getBottom ( ) -> getColor ( ) -> setARGB ( 'FF993300' ) ; $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'E13' ) -> getBorders ( ) -> getRight ( ) -> getColor ( ) -> setARGB ( 'FF993300' ) ; //设置填充颜色 $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'A1' ) -> getFill ( ) -> setFillType (PHPExcel_Style_Fill :: FILL_SOLID ) ; $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'A1' ) -> getFill ( ) -> getStartColor ( ) -> setARGB ( 'FF808080' ) ; $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'B1' ) -> getFill ( ) -> setFillType (PHPExcel_Style_Fill :: FILL_SOLID ) ; $objPHPExcel -> getActiveSheet ( ) -> getStyle ( 'B1' ) -> getFill ( ) -> getStartColor ( ) -> setARGB ( 'FF808080' ) ; //加图片 $objDrawing = new PHPExcel_Worksheet_Drawing ( ) ; $objDrawing -> setName ( 'Logo' ) ; $objDrawing -> setDescription ( 'Logo' ) ; $objDrawing -> setPath ( './images/officelogo.jpg' ) ; $objDrawing -> setHeight ( 36 ) ; $objDrawing -> setWorksheet ( $objPHPExcel -> getActiveSheet ( ) ) ; $objDrawing = new PHPExcel_Worksheet_Drawing ( ) ; $objDrawing -> setName ( 'Paid' ) ; $objDrawing -> setDescription ( 'Paid' ) ; $objDrawing -> setPath ( './images/paid.png' ) ; $objDrawing -> setCoordinates ( 'B15' ) ; $objDrawing -> setOffsetX ( 110 ) ; $objDrawing -> setRotation ( 25 ) ; $objDrawing -> getShadow ( ) -> setVisible ( true ) ; $objDrawing -> getShadow ( ) -> setDirection ( 45 ) ; $objDrawing -> setWorksheet ( $objPHPExcel -> getActiveSheet ( ) ) ; //在默认sheet后,创建一个worksheet $objPHPExcel -> createSheet ( ) ; |
http://www.freebluer.net/export-data-in-codeigniter-to-excel-with-phpexcel.html希望对大家有所帮助。
以上!