zoukankan      html  css  js  c++  java
  • 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、此举是为了实现单元格内可以手动指定换行的位置。只要指定的文本本身是换行的,或者插入换行符(' ')。

            2、要换行的文字,外面必须是双引号

          例如:

            文本设置为:$arr['header'] = "哈哈 HelloWorld";

            显示的效果为:

                  哈哈
                  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'] = "哈哈
    HelloWorld";
     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中文教程

    因为努力,所以前进
  • 相关阅读:
    表格Table宽度设置无效的解决方法
    ajax异步模式下实现同步和等待loading效果(jQuery同步Ajax带来的UI线程阻塞问题及解决办法)
    Chrome开发者工具详解(2)-Network面板
    iframe框架加载完成后执行函数
    js获取url?号后面的参数
    绑定键盘回车事件
    js判断一个元素是否在iframe里面
    字符串一些js操作方法
    基于GIS技术的国土空间规划“一张图”实施监督信息系统SuperMap arcgis
    基于supermap 3d-webgl技术的商务楼宇信息监测系统大数据 三维
  • 原文地址:https://www.cnblogs.com/ming-john/p/3918185.html
Copyright © 2011-2022 走看看