zoukankan      html  css  js  c++  java
  • php导出excel封装类

    因为实际情况的需要,导出excel表格在后台开发的过程中会经常用到。下面是我在实际应用中自己整理的一个导出excel类,需要PHPExcel支持,本类很好的完成导出表格的基本样式,保存路径,切换工作薄写入的功能,希望对大家有所帮助。

    1:需要PHPExcel支持

    2:导出可以自动切换工作薄,默认一个工作薄2000行,测试发现5000条左右的数据导出可能失败并且导出时间较长,

         切换工作薄可以提高成功率,并且方便阅读

    3:导出需要传必要参数,返回值是保存的后的excel地址,链接即可下载

      1 <?php
      2 /**
      3  * 公共的导出类@author:zhaoyaei
      4  * $column     :导出的第一行标题
      5  * $result     :需要导出的结果集
      6  * $path       :导出文件的保存路径
      7  * $sheet_num  :每个工作薄的最大行数(可选)
      8  * @return     :保存的地址
      9  */
     10 class Export{
     11     
     12     public function __construct(){
     13         //初始化类,引入相关类文件
     14         include "PHPExcel.php";
     15         include "PHPExcel/IOFactory.php";
     16     }
     17 
     18     //导出设置
     19     public function createxcel($column,$result,$path,$sheet_num = null){
     20         //检查数据的合法性
     21         if(empty($column) || empty($path) || $path == "" || empty($result)){
     22             return false;
     23         }
     24 
     25         //如果数据较大,则分薄导出
     26         if(empty($sheet_num) || $sheet_num <= 0){
     27             $sheet_num = 2000;
     28         }
     29 
     30         $path = $this->check_encod("GBK",$path);
     31         //创建PHPExcel实例
     32         $objPHPExcel = new PHPExcel();
     33         //总数据行数和数据列数
     34         $arr_num     = count($result);
     35         $field_count = count($column);
     36         //工作薄数目,工作薄数量太多,可以调节煤业导出的数据条数减少工作薄数目
     37         $get_num     = ceil($arr_num / $sheet_num);
     38         if($get_num > 20){
     39             return false;
     40         }
     41         
     42         //生成列信息
     43         $ary = array("", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
     44         for($i = 1;$i <= $field_count; $i++){
     45             $ary_info[$i]     = $ary[$i/27].$ary[$i%27];
     46             $fieldwidth[$i-1] = 20; //设置列宽默认是20
     47         }
     48         
     49 
     50         //循环每个工作薄
     51         for($sheet = 0;$sheet < $get_num; $sheet++){
     52             //创建工作薄,设置起始工作薄
     53             $objPHPExcel->createSheet($sheet);
     54             $Sheet = $objPHPExcel->setActiveSheetIndex($sheet);
     55             //设置工作薄样式
     56             $i = 1;
     57             foreach ($column as $key => $value){
     58                 //设置第一行的值
     59                 $Sheet->setCellValue($ary_info[$i] .'1', $value);
     60                 //设置第一行加粗
     61                 $objPHPExcel->getActiveSheet()->getStyle($ary_info[$i] .'1')->getFont()->setBold(true);
     62                 //设置行宽
     63                 $objPHPExcel->getActiveSheet()->getColumnDimension($ary_info[$i] )->setWidth($fieldwidth[$i-1]);
     64                 $i = $i + 1;
     65             }
     66             
     67             //每个工作薄开始的行数
     68             $hang_num  = 2;
     69             //本工作薄结束行数开始为0
     70             $end_num   = 0;
     71             //start_num本工作薄开始行数
     72             $start_num = $sheet*$sheet_num;
     73             //计算出每次导出的开始行数和结束行数(多工作薄导出)
     74             if($arr_num > ($start_num + $sheet_num)){
     75                 $end_num = $start_num + $sheet_num;
     76             }else{
     77                 $end_num = $arr_num;
     78             }
     79 
     80             //循环行数
     81             for($i = $start_num; $i < $end_num; $i++){
     82                 //循环列数
     83                 for($j = 1;$j <= $field_count; $j++){
     84                     //写入数据
     85                     $Sheet->setCellValue($ary_info[$j].($hang_num)," ".$result[$i][$j]);
     86                 }
     87                 $hang_num++;
     88             }
     89             //设置sheet的名称
     90             $objPHPExcel->getActiveSheet($sheet)->setTitle('sheet'.$sheet,$sheet);
     91             //设置sheet的起始位置
     92             $objPHPExcel->setActiveSheetIndex($sheet);
     93         }
     94         
     95         //通过PHPExcel_IOFactory的写函数将上面数据写出来
     96         $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
     97         //设置时区
     98         date_default_timezone_set("Asia/Shanghai");
     99         //保存并返回保存路径
    100         $objWriter->save($path);
    101         return $this->check_encod("utf-8",$path);
    102     }
    103 
    104     public function check_encod($encod,$string){
    105         //判断字符编码
    106         $encode = mb_detect_encoding($string, array("ASCII","UTF-8","GB2312","GBK","BIG5"));
    107         if($encode != $encod){
    108             $string = iconv($encode, $encod, $string);
    109         }
    110         return $string;
    111     }
    112 }
    113 ?>
  • 相关阅读:
    ansible 通过堡垒机/跳板机 访问目标机器需求实战(ssh agent forward)
    运维标准化与流程化建设
    运维与自动化运维发展方向
    文件atime未变问题的研究
    ansible 任务委派 delegate_to
    ansible 调优
    windows中安装模拟器后修改模拟器中的hosts方法
    负载均衡服务器主要考量三个指标
    DRBD+NFS+Keepalived高可用环境
    sshpass
  • 原文地址:https://www.cnblogs.com/zyf-zhaoyafei/p/4373931.html
Copyright © 2011-2022 走看看