• thinkphp框架中使用PHPExcel,按模板导出excel


      1 public function exportAll()
      2     {
      3         //获取年月和考勤天数
      4         $date = $this->_GET('date');
      5         $days = $this->_GET('days');
      6 
      7         require_once("Classes/PHPExcel.php");
      8         include("Classes/PHPExcel/IOFactory.php");
      9         $temPath = "./TempFile/kaoqing.xlsx";
     10         //检查文件路径
     11         if(!file_exists($temPath)){
     12             $this->error('模板不存在');
     13             return;
     14         }
     15         //加载模板
     16         $phpexcel =  PHPExcel_IOFactory::createReader("Excel2007")->load($temPath);
     17         
     18         $card_create_db =M('Qyattendance_record');
     19         $groupMember = $card_create_db->alias("r")->join('tp_Qyusers as u on u.id =r.uid','left')
     20         ->where("date_format(r.date,'%Y/%m') ='".$date."'")
     21         ->group('uid')
     22         ->field('uid,r.name,u.name as fullname, count(r.date) as realdays')
     23         ->select();
     24         $rowIndex = 5;
     25         $i = 0;
     26         foreach($groupMember as $item){
     27             //一览表写入数据
     28             //检查名称
     29             if(empty($item['fullname'])){
     30                 $item['fullname'] = "空名称".$i;
     31             }
     32             $phpexcel->getSheet(0)->setCellValue('B'.$rowIndex, $item['name']);
     33             $phpexcel->getSheet(0)->setCellValue('C'.$rowIndex, $item['fullname']);
     34             $phpexcel->getSheet(0)->setCellValue('D'.$rowIndex, $days);
     35             $phpexcel->getSheet(0)->setCellValue('E'.$rowIndex, $item['realdays']);
     36             if($i > 0){
     37                 //拷贝表
     38                 $cloned_sheet = clone $phpexcel->getSheet(1);
     39                 $cloned_sheet->setTitle($item['fullname']);
     40                 $phpexcel->addSheet($cloned_sheet);
     41             }else{
     42                 $phpexcel->getSheet(1)->setTitle($item['fullname']);
     43             }
     44             //获取员工考勤数据
     45             $members = $card_create_db->alias("r")->join('tp_Qyusers as u on u.id =r.uid','left')
     46                         ->where("date_format(r.date,'%Y/%m') ='".$date."' and r.uid = '".$item['uid']."'")
     47                            ->order('uid')
     48                            ->field('r.uid,r.name as rname,r.creatime,r.outtime,r.worktime,r.date,u.name as fullname,`outtime`-`creatime`-3600 as seconds')
     49                            ->select();
     50             $memberIndex = $i + 1;
     51             //写入员工详细考勤数据
     52             $vindex = 2;
     53             $j = 1;
     54             foreach($members as $v){
     55                 //编号
     56                 $phpexcel->getSheet($memberIndex)->setCellValue('A'.$vindex,$j);
     57                 //姓名
     58                 $phpexcel->getSheet($memberIndex)->setCellValue('B'.$vindex,$v['fullname']);
     59                 //日期
     60                 $phpexcel->getSheet($memberIndex)->setCellValue('C'.$vindex,$v['date']);
     61                 //检查时间
     62                 if(empty($v['creatime'])){
     63                     $starttime = '';
     64                 }else{
     65                     $starttime = date('H:i:s',$v['creatime']);
     66                 }
     67                 if(empty($v['outtime'])){
     68                     $endtime = '';
     69                 }else{
     70                     $endtime = date('H:i:s',$v['outtime']);
     71                 }
     72                 //上班时间
     73                 $phpexcel->getSheet($memberIndex)->setCellValue('D'.$vindex,$starttime);
     74                 //下班时间
     75                 $phpexcel->getSheet($memberIndex)->setCellValue('E'.$vindex,$endtime);
     76                 //休息时间
     77                 $phpexcel->getSheet($memberIndex)->setCellValue('F'.$vindex,'01:00');
     78                 //计算考勤时间
     79                 $time = '';
     80                 $remark = '';
     81                 $seconds = (int)$v['seconds'];
     82                 if($seconds > 0){
     83                     $hours = floor($seconds/3600);
     84                     $minutes = floor($seconds%3600/60);
     85                     $time = $hours.":".$minutes;
     86                     if($seconds < 28800){
     87                         $remark = '考勤时间不足';
     88                     }
     89                 }else{
     90                     $time = '00:00';
     91                 }
     92                 if(empty($v['outtime'])){
     93                     $remark = '未签下班';
     94                 }
     95                 $phpexcel->getSheet($memberIndex)->setCellValue('G'.$vindex,$time);
     96                 //备注
     97                 $phpexcel->getSheet($memberIndex)->setCellValue('H'.$vindex,$remark);
     98                 $vindex++;
     99                 $j++;
    100             }
    101             $i++;
    102             $rowIndex++;
    103         }
    104         
    105         //导出属性设置
    106         $date = str_replace("/","_",$date);
    107         $outputFileName = "kaoqing_".$date.".xlsx";
    108         require_once("Classes/PHPExcel/Writer/Excel2007.php"); 
    109         $objWriter = new PHPExcel_Writer_Excel2007($phpexcel);
    110         header("Content-Type: application/force-download");
    111         header("Content-Type: application/octet-stream");
    112         header("Content-Type: application/download");
    113         header('Content-Disposition:inline;filename="'.$outputFileName.'"');
    114         header("Content-Transfer-Encoding: binary");
    115         header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    116         header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    117         header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    118         header("Pragma: no-cache");
    119         $objWriter->save('php://output');
    120     }
  • 相关阅读:
    直接用ISO文件在linux上安装新系统
    vsftpd config备忘
    失恋那回事~~~
    Java之深入JVM(0) 序
    No.6 ThreadLocal类及应用技巧
    Java之多线程(1) Race Condition引起的性能问题
    NO.10 Callable与Future的应用
    NO.5 线程范围内共享变量的概念与作用(二)
    NO.5 线程范围内共享变量的概念与作用(一)
    NO.7多个线程之间共享数据的方式探讨
  • 原文地址:https://www.cnblogs.com/fuge/p/6297658.html
Copyright © 2020-2023  润新知