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 }
ExcelExportUtil

 

调用方法

 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     }
样式设置

 

其他不错的文章介绍:

    PHPExcel中文帮助手册

    PHPExcel中文教程

posted on 2014-08-23 13:46  初闯入PHP的世界  阅读(1424)  评论(0编辑  收藏  举报

导航