下載安裝PHPExcel庫
下載PHPExcel:http://phpexcel.codeplex.com
安裝PHPExcel非常的簡單,只需解壓壓縮包裏的Classes文件夾中的內容到application\libraries\目錄下即可,最終的目錄結構如下:
– application\libraries\PHPExcel.php
– application\libraries\PHPExcel (文件夾)
但是由於CI的命名規則的約束,需要修改PHPExcel庫中的類名以遵從CI中的類命名規則。打開application\libraries\PHPExcel\IOFactory.php 文件,將其類名從PHPExcel_IOFactory改爲IOFactory,並將其構造函數改爲public類型。
至此,PHPExcel庫安裝完畢。
使用PHPExcel庫生成excel文件
在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 | publicfunction 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($fieldsas$field) { $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col,$row,$field); $col++; } // 從第二行開始輸出數據內容 $row=2; foreach($resultas$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希望對大家有所幫助。
以上!