zoukankan      html  css  js  c++  java
  • php实现导出excel功能(转)

    写在前面:马上面临着毕业设计的系统检查,为避免bug侧漏,不断的进行项目优化,目前在bug池中已经游走了一两天了,重要的是自己在bug池游走的过程中还不忘记给自己增加新的功能,比如,我认为加一个批量的导出功能可以为毕业设计提分,omg,说一不二开始捯饬excel导出;

    问题:如何自定义的导出,如何定义自己想要的模板呢?

    1.首先下载phpExcel 文件 https://pan.baidu.com/s/1ITnaVJ1n6pujku3YgMc-7w  提取码: nb4m  

    2.解压文件到php的vender的文件夹下面

    3.进行编写导出的代码

      在cntroller中新建立一个文件(防止与其他的逻辑代码混合)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    public function clubpeople(){<br>//可以进行自定义传值,比如一个id,去向数据库找那个取出值
        if(isset($_GET['club_id'])){
            $clubid=$_GET['club_id'];
        }
        //获取到get参数
                //1.从数据库中导出需要进行要导出的数据
                $list =Db::query('SELECT stu_list.stu_name,stu_list.stu_department,stu_list.stu_phone,stu_list.stu_email,stu_list.stu_profess
                ,club_branch.* FROM club_branch INNER JOIN stu_list ON club_branch.stu_number = stu_list.stu_number
                 where club_branch.club_id=:acc order by club_branch.club_branch_name ',['acc'=>$clubid]);
                  
        //重要补助
            //2.加载PHPExcle类库
            vendor('PHPExcel.PHPExcel');
            //3.实例化PHPExcel类
            $objPHPExcel = new PHPExcel();
            //4.激活当前的sheet表
            $objPHPExcel->setActiveSheetIndex(0);
            //5.设置表格头(即excel表格的第一行)
            $objPHPExcel->setActiveSheetIndex(0)
                    ->setCellValue('A1''部门')
                    ->setCellValue('B1''职位')
                    ->setCellValue('C1''学号')
                    ->setCellValue('D1''学生姓名')
                    ->setCellValue('E1''联系方式')
                    ->setCellValue('F1''邮箱')
                    ->setCellValue('G1''院系')
                    ->setCellValue('H1''专业');
            //设置A列水平居中
            $objPHPExcel->setActiveSheetIndex(0)->getStyle('A1')->getAlignment()
                        ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
            //设置单元格宽度
            //6.循环刚取出来的数组,将数据逐一添加到excel表格。
            $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('B')->setWidth(10);
            $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('C')->setWidth(20);
            $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('E')->setWidth(20);
            $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('F')->setWidth(30);
              
            for($i=0;$i<count($list);$i++){
                $objPHPExcel->getActiveSheet()->setCellValue('A'.($i+2),$list[$i]['club_branch_name']);//ID
                $objPHPExcel->getActiveSheet()->setCellValue('B'.($i+2),$list[$i]['club_position']);//标签码
                $objPHPExcel->getActiveSheet()->setCellValue('C'.($i+2),$list[$i]['stu_number']);//防伪码
                $objPHPExcel->getActiveSheet()->setCellValue('D'.($i+2),$list[$i]['stu_name']);//ID
                $objPHPExcel->getActiveSheet()->setCellValue('E'.($i+2),$list[$i]['stu_phone']);//标签码
                $objPHPExcel->getActiveSheet()->setCellValue('F'.($i+2),$list[$i]['stu_email']);//ID
                $objPHPExcel->getActiveSheet()->setCellValue('G'.($i+2),$list[$i]['stu_department']);//标签码
                $objPHPExcel->getActiveSheet()->setCellValue('H'.($i+2),$list[$i]['stu_profess']);//防伪码
            }
            //7.设置保存的Excel表格名称
            $filename = $club_name.'人员名单'.date('ymd',time()).'.xls';
            //8.设置当前激活的sheet表格名称;
            $objPHPExcel->getActiveSheet()->setTitle('人员名单');
            //9.设置浏览器窗口下载表格
            header("Content-Type: application/force-download"); 
            header("Content-Type: application/octet-stream"); 
            header("Content-Type: application/download"); 
            header('Content-Disposition:inline;filename="'.$filename.'"'); 
            //生成excel文件
            $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
            //下载文件在浏览器窗口
            $objWriter->save('php://output');
            exit;
    }

      这样一个下载的表格就完成了,

    2:如何进行解析表格存放在数据库中呢

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public function getExcel(){ <br>//首先要判断当前是否与文件传过来,并判断文件传输是否正确
       if(isset($_FILES["file"]) && ($_FILES["file"]["error"] == 0)){       
              $file = $_FILES['file'];
              $path = $file['tmp_name'];
                //读取excel
                 $arr = $this->excel($path, 0);
                 $result =$arr;//用来记录当前操作的错误之类的
                 //当解析完数据结构之后,就可以进行实地的插入数据库操作了,此处省略掉这个部分~
       
           $number = mt_rand(999, 9999);//随机数返回前端,取名字
           session('file'.$number ,$arg);  //保存当前的一个报告结果数组,可以对报告进行下载
           $resultr['status']=1;
           $resultr['msg']= $number;
           return json($resultr);
           
       }else{
           $resultarr['status']=0;
           $resultarr['msg']='文件上传发生错误,,稍后再试';
           return json($resultarr);
       }
        
       }

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    public function excel($filePath='', $sheet=0){
                      
                      import("Org.Util.PHPExcel");
                      import("Org.Util.PHPExcel.Reader.Excel5");
                     import("Org.Util.PHPExcel.Reader.Excel2007");
              
                     if(empty($filePath) or !file_exists($filePath)){die('file not exists');}
                     $PHPReader = new PHPExcel_Reader_Excel2007();        //建立reader对象
                     if(!$PHPReader->canRead($filePath)){
                         $PHPReader = new PHPExcel_Reader_Excel5();
                        if(!$PHPReader->canRead($filePath)){
                              echo 'no Excel';
                            return ;
                          }
                     }
                     $PHPExcel = $PHPReader->load($filePath);        //建立excel对象
                     $currentSheet = $PHPExcel->getSheet($sheet);        //**读取excel文件中的指定工作表*/
                    $allColumn = $currentSheet->getHighestColumn();        //**取得最大的列号*/
                    $allRow = $currentSheet->getHighestRow();        //**取得一共有多少行*/
                     $data = array();
                     for($rowIndex=1;$rowIndex<=$allRow;$rowIndex++){        //循环读取每个单元格的内容。注意行从1开始,列从A开始
                         for($colIndex='A';$colIndex<=$allColumn;$colIndex++){
                             $addr = $colIndex.$rowIndex;
                             $cell = $currentSheet->getCell($addr)->getValue();
                             if($cell instanceof PHPExcel_RichText){ //富文本转换字符串
                                 $cell = $cell->__toString();
                             }
                             $data[$rowIndex][$colIndex] = $cell;
                         }
                     }
                     return $data;
                 }
                

      

    omg~~三段代码完成的功能分别是导出excel,还有就是上传excel,然后可以进行解析,

  • 相关阅读:
    【js】replace()
    【js】indexOf()
    【js】sort()
    【js】typeof与instanceof
    【js】with 语句
    跳出框架iframe的操作语句
    Mongodb启动命令mongod参数说明
    ERROR: child process failed, exited with error number 100
    SELECT控件add方法 ie 类型不匹配
    Red hat linux ping: unknown host www.baidu.com
  • 原文地址:https://www.cnblogs.com/surplus/p/15353646.html
Copyright © 2011-2022 走看看