PHPExcel工具类---导出工具类
本文仅是自己作为初入门的程序员的总结,如有错误,还请大家指正,在此谢谢了!
说明:
本文中的内容,都是作者在windows 7下使用过的,不能保证在linux下仍可使用!
PHPExcel工具类分成以下几个部分介绍:
1、第一个部分:介绍PHPExcel的属性设置
2、第二个部分:封装PHPExcel的工具类
第一部分:
PHPExcel常用属性使用
前景:
需先实例化几个变量:
$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(); //获得字体属性
常用属性:
1、设置Sheet名称:
//设置当前活动sheet的名称
$this->objActSheet->setTitle($title);
2、设置对齐和单元格内换行
2.1、水平对齐
//设置单元格内容水平对齐
$objAlign->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
说明:
水平对齐的变量有:PHPExcel_Style_Alignment::HORIZONTAL_LEFT、PHPExcel_Style_Alignment::HORIZONTAL_CENTER、PHPExcel_Style_Alignment::HORIZONTAL_RIGHT;
具体含义分别为:左对齐、居中对齐、右对齐。
2.2、竖直对齐
$objAlign->setVertical(PHPExcel_Style_Alignment::VERTICAL_TOP);
说明:
竖直对齐的变量有:PHPExcel_Style_Alignment::VERTICAL_TOP、PHPExcel_Style_Alignment::VERTICAL_CENTER、PHPExcel_Style_Alignment::VERTICAL_BOTTOM
具体含义分别为:顶部对齐、竖直居中对齐、底部对齐
2.3、单元格内换行
$objAlign->setWrapText(true);
说明:
1、此举是为了实现单元格内可以手动指定换行的位置。只要指定的文本本身是换行的,或者插入换行符('\n')。
2、要换行的文字,外面必须是双引号
例如:
文本设置为:$arr['header'] = "哈哈\nHelloWorld";
显示的效果为:
哈哈
HelloWorld
3、设置字体、颜色等
3.1、设置字体
$objFont->setName('微软雅黑' ); //设置要使用的字体
3.2、设置字号
$objFont->setSize( 11 );
3.3、设置加粗
$objFont->setBold( false );
3.4、设置字颜色
$objFont->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
说明:
1、其颜色组成为:Alpha(透明度)通道+RGB色彩模式
2、ARGB---Alpha,Red,Green,Blu
3、一般我自己用的值都是"FF"+RGB的颜色值,如:"FFCC15DD"
4、单元格设置:
4.1、设置背景色
$objStyle->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
$objStyle->getFill()->getStartColor()->setARGB('FF595959');
4.2、设置宽度
$this->objActSheet->getColumnDimension($widthStr)->setWidth('27.45');
4.3、设置高度
$this->objActSheet->getRowDimension($heightStr)->setRowHeight('27.45');
4.4、单元格合并
$this->objActSheet->mergeCells('A1:I1');
里面指定要合并的单元格范围
5、其他设置:
5.1、设置自动筛选
$this->objActSheet->setAutoFilter("A2:B2");
说明:
当前笔者比较愚笨,还不能做到随意指定设置自动筛选的方法。
5.2、单元格格式设置防止科学计数法
//设置单元格格式(防止科学技术法)
$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 }
其他不错的文章介绍:
posted on 2014-08-23 13:46 初闯入PHP的世界 阅读(1432) 评论(0) 编辑 收藏 举报