PHPExcel工具類---導出工具類

本文僅是本身做爲初入門的程序員的總結,若有錯誤,還請你們指正,在此謝謝了!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 }
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中文教程

相關文章
相關標籤/搜索