本文僅是本身做爲初入門的程序員的總結,若有錯誤,還請你們指正,在此謝謝了!php
說明:html
本文中的內容,都是做者在windows 7下使用過的,不能保證在linux下仍可以使用!linux
PHPExcel工具類分紅如下幾個部分介紹:程序員
一、第一個部分:介紹PHPExcel的屬性設置windows
二、第二個部分:封裝PHPExcel的工具類數組
第一部分:app
PHPExcel經常使用屬性使用ide
前景:工具
需先實例化幾個變量:post
$this->objExcel = new PHPExcel(); //實例化一個PHPExcel變量
$this->objExcel->setActiveSheetIndex(0); //設置要操做的Sheet頁
$this->objActSheet = $this->objExcel->getActiveSheet(); //獲取當前要操做的Sheet頁
$objStyle = $this->objActSheet->getStyle('A1'); //獲取要設置單元格的樣式,括號裏的內容也但是:('A1:E1')
$objAlign = $objStyle->getAlignment(); //用來設置對齊屬性和單元格內文本換行的一個變量
$objFont = $objStyle->getFont(); //得到字體屬性
常用屬性:
一、設置Sheet名稱:
//設置當前活動sheet的名稱
$this->objActSheet->setTitle($title);
二、設置對齊和單元格內換行
2.一、水平對齊
//設置單元格內容水平對齊
$objAlign->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
說明:
水平對齊的變量有:PHPExcel_Style_Alignment::HORIZONTAL_LEFT、PHPExcel_Style_Alignment::HORIZONTAL_CENTER、PHPExcel_Style_Alignment::HORIZONTAL_RIGHT;
具體含義分別爲:左對齊、居中對齊、右對齊。
2.二、豎直對齊
$objAlign->setVertical(PHPExcel_Style_Alignment::VERTICAL_TOP);
說明:
豎直對齊的變量有:PHPExcel_Style_Alignment::VERTICAL_TOP、PHPExcel_Style_Alignment::VERTICAL_CENTER、PHPExcel_Style_Alignment::VERTICAL_BOTTOM
具體含義分別爲:頂部對齊、豎直居中對齊、底部對齊
2.三、單元格內換行
$objAlign->setWrapText(true);
說明:
一、此舉是爲了實現單元格內能夠手動指定換行的位置。只要指定的文本自己是換行的,或者插入換行符('\n')。
二、要換行的文字,外面必須是雙引號
例如:
文本設置爲:$arr['header'] = "哈哈\nHelloWorld";
顯示的效果爲:
哈哈
HelloWorld
三、設置字體、顏色等
3.一、設置字體
$objFont->setName('微軟雅黑' ); //設置要使用的字體
3.二、設置字號
$objFont->setSize( 11 );
3.三、設置加粗
$objFont->setBold( false );
3.四、設置字顏色
$objFont->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
說明:
一、其顏色組成爲:Alpha(透明度)通道+RGB色彩模式
二、ARGB---Alpha,Red,Green,Blu
三、通常我本身用的值都是"FF"+RGB的顏色值,如:"FFCC15DD"
四、單元格設置:
4.一、設置背景色
$objStyle->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
$objStyle->getFill()->getStartColor()->setARGB('FF595959');
4.二、設置寬度
$this->objActSheet->getColumnDimension($widthStr)->setWidth('27.45');
4.三、設置高度
$this->objActSheet->getRowDimension($heightStr)->setRowHeight('27.45');
4.四、單元格合併
$this->objActSheet->mergeCells('A1:I1');
裏面指定要合併的單元格範圍
五、其餘設置:
5.一、設置自動篩選
$this->objActSheet->setAutoFilter("A2:B2");
說明:
當前筆者比較愚笨,還不能作到隨意指定設置自動篩選的方法。
5.二、單元格格式設置防止科學計數法
//設置單元格格式(防止科學技術法)
$numberFormat = $objStyle->getNumberFormat();
$numberFormat->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);
說明:
讀取的時候必定要用:getFormattedValue(),這樣能夠必定程度上減小讀出科學計數法的數。雖然php有方法轉換科學計數法,可是會遭遇精度丟失的狀況。
筆者如今最頭疼的一個問題就是科學計數法,如今還未有很是好的解決方案,如今能解決的方法都不完全。筆者會繼續探索!
總結:
基本屬性設置做者本身的使用基本就是這些,其餘的一些屬性待筆者親自驗證後再補充!
做者第一次在博客園記錄下本身在項目中用到的知識,雖然很淺顯,可是確能解決一部分Excel導出的問題,但願能對讀者有所幫助!
第二部分:
附上做者本身所寫的工具類代碼,其中有融合別人的代碼。後期做者會進一步優化、封裝代碼!
Excel導出工具類
1 /** 2 * 導出工具類 3 * 4 * @package util 5 * @category util 6 * @link /util/ExcelExportUtil.php 7 * @author mingwang3 8 * @version 1.0 9 * @created 2014-8-18 13:19:00 10 */ 11 // PHPExcel 12 require_once ( INCLUDE_PATH . "/PHPExcel.php" ); 13 require_once ( INCLUDE_PATH . "/PHPExcel/Writer/Excel5.php" ); 14 15 class ExcelExportUtil 16 { 17 private $cells = null; 18 private $seq = 0; 19 private $charset = 'gb2312'; 20 private $font = '宋體'; 21 private $objExcel; 22 private $objWriter; 23 private $objActSheet; 24 25 //編碼方式:gb2312 26 public function __construct($title, $charset = 'utf-8') 27 { 28 $this->objExcel = new PHPExcel(); 29 $this->objWriter = new PHPExcel_Writer_Excel5($this->objExcel);//非2007格式 30 //$this->objWriter = new PHPExcel_Writer_Excel2007($objExcel);//2007格式 31 //$this->objWriter->setOffice2003Compatibility(true); 32 $this->objExcel->setActiveSheetIndex(0); 33 34 $this->objActSheet = $this->objExcel->getActiveSheet(); 35 36 //設置當前活動sheet的名稱 37 $this->objActSheet->setTitle($title); 38 39 if($charset != '') 40 { 41 $this->charset = $charset; 42 } 43 $outputFileName = iconv("UTF-8", $this->charset, $title.".xls"); 44 //header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//2007格式 45 //header('Content-Type: application/vnd.ms-excel');//非2007格式 46 header("Content-Type: application/force-download"); 47 header("Content-Type: application/octet-stream"); 48 header("Content-Type: application/download"); 49 header('Content-Disposition:inline;filename="'.$outputFileName.'"'); 50 header("Content-Transfer-Encoding: binary"); 51 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 52 header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 53 header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 54 header("Pragma: no-cache"); 55 } 56 57 /** 58 * 僅僅設置內容 59 * @param $col_arr 要設置的數組 60 */ 61 public function setExcelVal($arr,$colKeyArr) 62 { 63 $rowNum = 0; 64 foreach ($arr as $key => $value){ 65 $k = 0; 66 //設置頭部分 67 if($key == 'header'){ 68 $rowNum ++; 69 $col = chr(65+$k); 70 $this->objActSheet->setCellValue("$col$rowNum", $value); 71 } 72 73 //設置標題部分 74 if($key == 'title'){ 75 $rowNum ++; 76 //遍歷設置標題部分 77 foreach ($value as $valueSecond){ 78 $col = chr(65+$k); 79 // dump($colKeyArr[$k]); 80 // die; 81 $this->objActSheet->setCellValue("$col$rowNum", $value[$colKeyArr[$k]]); 82 $k++; 83 } 84 } 85 86 //設置數據部分 87 if($key == 'data'){ 88 //遍歷設置標題部分 89 foreach ($value as $valueSecond){ 90 $rowNum ++; 91 $k = 0; 92 //遍歷設置標題部分 93 foreach ($valueSecond as $valueThird){ 94 $col = chr(65+$k); 95 //性別要特殊處理 96 if($colKeyArr[$k] == 'stdSex'){ 97 if($valueSecond[$colKeyArr[$k]] == 0){ 98 $this->objActSheet->setCellValue("$col$rowNum", '女'); 99 }else{ 100 $this->objActSheet->setCellValue("$col$rowNum", '男'); 101 } 102 }else{ 103 $this->objActSheet->setCellValue("$col$rowNum", $valueSecond[$colKeyArr[$k]]); 104 } 105 106 $k++; 107 } 108 } 109 } 110 111 } 112 } 113 114 /** 115 * 僅僅設置樣式 116 * @param $col_style 要設置的數組 117 * key值: 118 * 'cell_str' :要設置的 單元格定位 119 * 'cell_style':放置的樣式數組 120 * 121 */ 122 public function setCellStyle($col_style){ 123 124 $objStyle = $this->objActSheet->getStyle($col_style['cell_str']); 125 126 //若是樣式數組爲空,則直接返回 127 //$cell如今爲單元格樣式變量 128 $cell = $col_style['cell_style']; 129 if(empty($cell)){ 130 return ; 131 } 132 133 //水平位置設置 134 $objAlign = $objStyle->getAlignment(); 135 if(!empty($cell['align'])){ 136 switch($cell['align']){ 137 case 'left': 138 $objAlign->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT); 139 break; 140 case 'center': 141 $objAlign->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 142 break; 143 case 'right': 144 $objAlign->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT); 145 break; 146 default: 147 $objAlign->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 148 break; 149 } 150 //$objActSheet->getColumnDimension("$col1$col2")->setAutoSize(true); 151 } 152 //豎直位置設置 153 if(!empty($cell['valign'])){ 154 switch($cell['valign']){ 155 case 'top': 156 $objAlign->setVertical(PHPExcel_Style_Alignment::VERTICAL_TOP); 157 break; 158 case 'center': 159 $objAlign->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); 160 break; 161 case 'bottom': 162 $objAlign->setVertical(PHPExcel_Style_Alignment::VERTICAL_BOTTOM); 163 break; 164 default: 165 $objAlign->setHorizontal(PHPExcel_Style_Alignment::VERTICAL_CENTER); 166 break; 167 } 168 //$objActSheet->getColumnDimension("$col1$col2")->setAutoSize(true); 169 } 170 //單元格內換行 171 if(!empty($cell['wrap-text'])){ 172 $objAlign->setWrapText(true); 173 } 174 175 /****************字體設置****************/ 176 //得到字體屬性 177 $objFont = $objStyle->getFont(); 178 179 //設置字體 180 isset($cell['family'])?$objFont->setName($cell['family'] ):$objFont->setName('微軟雅黑' ); 181 //設置字號 182 isset($cell['font-size'])?$objFont->setSize($cell['font-size'] ):$objFont->setSize( 11 ); 183 //設置加粗 184 isset($cell['bold'])?$objFont->setBold($cell['bold'] ):$objFont->setBold( false ); 185 //設置字顏色 186 isset($cell['font-color'])?$objFont->getColor()->setARGB($cell['font-color']):$objFont->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE); 187 188 //設置背景色 189 if(isset($cell['background-color'])){ 190 $objStyle->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID); 191 $objStyle->getFill()->getStartColor()->setARGB($cell['background-color']); 192 } 193 194 //取A1中的A和1 195 $widthStr = substr($col_style['cell_str'],0,1); 196 $heightStr = substr($col_style['cell_str'],1); 197 198 //寬度設置 199 if(!empty($cell['width'])){ 200 $this->objActSheet->getColumnDimension($widthStr)->setWidth($cell['width']); 201 } 202 203 //高度設置 204 if(!empty($cell['height'])){ 205 $this->objActSheet->getRowDimension($heightStr)->setRowHeight($cell['height']); 206 } 207 //列合併 208 if(!empty($cell['colspan'])){ 209 $this->objActSheet->mergeCells($cell['colspan']); 210 } 211 //行合併 212 if(!empty($cell['rowspan'])){ 213 $this->objActSheet->mergeCells($cell['rowspan']); 214 215 } 216 } 217 218 /** 219 * 設置默認Excel樣式 220 */ 221 public function setExcelDefaultStyle(){ 222 223 //獲取默認樣式 224 $objStyle = $this->objActSheet->getDefaultStyle(); 225 226 //設置默認對齊方式 227 $objAlign = $this->objActSheet->getDefaultStyle()->getAlignment(); 228 $objAlign->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 229 $objAlign->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); 230 //設置默認字體 231 $objFont = $objStyle->getFont(); 232 233 //設置字體 234 $objFont->setName('宋體' ); 235 //設置字號 236 $objFont->setSize( 11 ); 237 //設置加粗 238 $objFont->setBold( false ); 239 //設置字顏色 240 $objFont->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLACK); 241 242 //設置自動篩選 243 $this->objActSheet->setAutoFilter("A2:B2"); 244 // $this->objActSheet->setAutoFilter("E2:E2"); 245 // $this->objActSheet->setAutoFilterByColumnAndRow(); 246 247 //設置單元格格式(防止科學技術法) 248 $numberFormat = $objStyle->getNumberFormat(); 249 $numberFormat->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER); 250 251 } 252 253 /** 254 * 輸出Excel 255 */ 256 public function save() 257 { 258 $this->objWriter->save('php://output'); 259 } 260 }
調用方法
1 /** 2 * 導出學生數據 3 * @param Array $result 要導出的數據 4 */ 5 public function exportStudentDataToExcel( $result ){ 6 7 //設置標題 8 $arr['header'] = "哈哈\nHelloWorld"; 9 10 //設置標題 11 $arr['title'] = array( 12 'stdCode'=>'學籍號', 13 'stdName'=>'姓名', 14 'stdSex'=>'性別', 15 'semName'=>'學期', 16 'gradeName'=>'年級', 17 'classNoName'=>'班級', 18 'stdMobile'=>'聯繫方式', 19 'loginName'=>'登陸名', 20 'password'=>'登陸密碼', 21 22 ); 23 //設置key值列 24 $colKeyArr = array('semName','gradeName','classNoName', 25 'stdCode','stdName','loginName','password'); 26 //設置數據列 27 $arr['data'] = $result; 28 29 $excel = new ExcelExportUtil('學生帳戶'); 30 //設置默認樣式 31 $excel->setExcelDefaultStyle(); 32 //設置值 33 $excel->setExcelVal($arr , $colKeyArr ); 34 35 //設置樣式 36 $col_style = $this->getStudentCellStyle(); 37 foreach($col_style as $val){ 38 $excel->setCellStyle($val); 39 } 40 //保存Excel 41 $excel->save(); 42 }
設置值的數據格式樣子:
Array ( [header] => 哈哈 HelloWorld [title] => Array ( [stdCode] => 學籍號 [stdName] => 姓名 [stdSex] => 性別 [semName] => 學期 [gradeName] => 年級 [classNoName] => 班級 [stdMobile] => 聯繫方式 [loginName] => 登陸名 [password] => 登陸密碼 ) [data] => Array ( [0] => Array ( [classId] => 1 [classNoName] => 1班(老區) [glId] => 1 [glName] => 小學 [gradeId] => 14 [gradeName] => 小學四年級 [loginName] => zxr11 [password] => xgsc26 [semId] => 10 [semName] => 2013-2014第二學期 [stdCode] => 3401041000120020 [stdId] => 11 [stdMobile] => [stdName] => 周曉冉 [stdSex] => ) [1] => Array ( [classId] => 1 [classNoName] => 1班(老區) [glId] => 1 [glName] => 小學 [gradeId] => 14 [gradeName] => 小學四年級 [loginName] => hyx12 [password] => xgsc26 [semId] => 10 [semName] => 2013-2014第二學期 [stdCode] => 3401041000120024 [stdId] => 12 [stdMobile] => [stdName] => 胡遠晰 [stdSex] => ) [2] => Array ( [classId] => 1 [classNoName] => 1班(老區) [glId] => 1 [glName] => 小學 [gradeId] => 14 [gradeName] => 小學四年級 [loginName] => qkh13 [password] => xgsc26 [semId] => 10 [semName] => 2013-2014第二學期 [stdCode] => 3401041000120028 [stdId] => 13 [stdMobile] => [stdName] => 祁克涵 [stdSex] => ) ) )
|
樣式設置
1 /** 2 * 得到樣式數組 3 * @return Array 返回一個樣式數組 4 */ 5 private function getStudentCellStyle(){ 6 //樣式數組 7 $col_style[] =array( 8 'cell_str'=>'A1', 9 'cell_style'=>array( 10 'font-size'=>11, 11 'family'=>'宋體', 12 // 'background-color'=>'FF595959', 13 'font-color'=>'FFFF0000', 14 'colspan'=>"A1:I1", 15 'height'=>'75', 16 'align'=>'left', 17 'valign'=>'top', 18 'wrap-text'=>true, 19 ) 20 ); 21 22 //樣式數組 23 $col_style[] =array( 24 'cell_str'=>'A1:G1', 25 'cell_style'=>array( 26 'font-size'=>11, 27 'bord'=>true, 28 'family'=>'微軟雅黑', 29 'background-color'=>'FF595959', 30 'font-color'=>'FFFFFFFF', 31 'align'=>'center', 32 'bold'=>'true', 33 ) 34 ); 35 /* $col_style[] =array( 36 'cell_str'=>'F2:H2', 37 'cell_style'=>array( 38 'background-color'=>'FFBFBFBF', 39 ) 40 ); */ 41 $col_style[] =array( 42 'cell_str'=>'A', 43 'cell_style'=>array( 44 'width'=>'27.45', 45 ) 46 ); 47 $col_style[] =array( 48 'cell_str'=>'B', 49 'cell_style'=>array( 50 'width'=>'15.73', 51 ) 52 ); 53 $col_style[] =array( 54 'cell_str'=>'C', 55 'cell_style'=>array( 56 'width'=>'17.45', 57 ) 58 ); 59 $col_style[] =array( 60 'cell_str'=>'D', 61 'cell_style'=>array( 62 'width'=>'25.38', 63 ) 64 ); 65 $col_style[] =array( 66 'cell_str'=>'E', 67 'cell_style'=>array( 68 'width'=>'16.63', 69 ) 70 ); 71 $col_style[] =array( 72 'cell_str'=>'F', 73 'cell_style'=>array( 74 'width'=>'16.63', 75 ) 76 ); 77 $col_style[] =array( 78 'cell_str'=>'G', 79 'cell_style'=>array( 80 'width'=>'16.63', 81 ) 82 ); 83 return $col_style; 84 }
其餘不錯的文章介紹: