本文仅是自己作为初入门的程序员的总结,如有错误,还请大家指正,在此谢谢了!
说明:
本文中的内容,都是作者在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 }