CodeIgniter+PHPExcel 導出數據爲Excel文件

下載安裝PHPExcel庫

下載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

使用PHPExcel庫生成excel文件

在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

以上!

相關文章
相關標籤/搜索