下載PHPExcel:http://phpexcel.codeplex.comphp
安裝PHPExcel很是的簡單,只需解壓壓縮包裏的Classes文件夾中的內容到application\libraries\目錄下便可,最終的目錄結構以下:html
– application\libraries\PHPExcel.phpapp
– application\libraries\PHPExcel (文件夾)ide
可是因爲CI的命名規則的約束,須要修改PHPExcel庫中的類名以聽從CI中的類命名規則。打開application\libraries\PHPExcel\IOFactory.php 文件,將其類名從PHPExcel_IOFactory改成IOFactory,並將其構造函數改成public類型。函數
至此,PHPExcel庫安裝完畢。codeigniter
在CI中寫一個Controller實現導出功能this
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: p_w_upload;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官方的文檔,在這裏我列出了一些經常使用的設置選項。spa
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 ( './p_w_picpaths/officelogo.jpg' ) ; $objDrawing -> setHeight ( 36 ) ; $objDrawing -> setWorksheet ( $objPHPExcel -> getActiveSheet ( ) ) ; $objDrawing = new PHPExcel_Worksheet_Drawing ( ) ; $objDrawing -> setName ( 'Paid' ) ; $objDrawing -> setDescription ( 'Paid' ) ; $objDrawing -> setPath ( './p_w_picpaths/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但願對你們有所幫助。.net
以上!