pHPexecl动态生成列表头和数据

本文介绍了一种使用PHPExcel库动态生成Excel表格的方法,包括自定义横坐标、表头和单元格数据的填充策略。通过遍历数组,实现表头和数据的动态生成,适用于大量数据的快速导出。
 //动态生成横坐标
    public function newExplodeExecl_3($info){
    //print_r($info['num']);exit;
//       dump($info);exit;
    import("Org.Util.PHPExcel");
    import("Org.Util.PHPExcel.IOFactory");
    import("Org.Util.PHPExcel.PHPExcel");
    $objPHPExcel = new \PHPExcel();
    $getActiveSheet = $objPHPExcel->getActiveSheet(0);
    $setActiveSheet = $objPHPExcel->setActiveSheetIndex(0);
    $value = array('店铺名称','区域划分','面积','店铺类型','业务员');
    //生成前5个字段的表头
    $start = ord('A');$end = ord('E');
    $j = 0;
    for($i = $start;$i<=$end;$i++){
    $cel = chr($i);
    $setActiveSheet ->setCellValue($cel.'1',$value[$j]);
    $j++;
    
    }
    
    
    $num = count($info['title']); //要动态生成的列数  
    $begin = 'F';
    $jj = 0;$nn = 0;
    
    for($i=0;$i<=$num;$i++){
    
    $beginstr = ord($begin);
    $cel = chr($beginstr+$i);
     
    if($beginstr+$i <= 90){//列数小于26,Z字母的ASCII是90
    
    $setActiveSheet ->setCellValue($cel.'1',$info['title'][$i]);
    }
     
    if($beginstr+$i > 90){//大于Z,
             
    $startnum = '65';
    $char_list=array();
    for($sii=0;$sii<26;$sii++){
    $char=chr(65+$sii);
      $char_list[$sii]=$char;
    }
        
    $kkk=((int)$jj/26);
    $cel = chr($startnum +$nn);
    $setActiveSheet ->setCellValue($char_list[$kkk].$cel.'1',$info['title'][$i]);//生成AA-AZ,BA-BZ等表头
               $nn++;
               if($nn>25){$nn=0;}                            
    $jj++;
    
      }
    }
       
    $i = 2;$j = 2;
    foreach($info['num'] as $vv){
     
    $j = $i+2;
    $getActiveSheet->mergeCells("A$i:A$j");//合并单元
    $getActiveSheet->mergeCells("B$i:B$j");
    $getActiveSheet->mergeCells("C$i:C$j");
    $getActiveSheet->mergeCells("D$i:D$j");
    $getActiveSheet->mergeCells("E$i:E$j");
     
     
    $setActiveSheet->setCellValue ( "A$i", $vv['cust_name']); //设置单元格的值
    $setActiveSheet->setCellValue( "B$i", $vv['ct_name']);
    $setActiveSheet->setCellValue ( "C$i", $vv['business_area']);
    $setActiveSheet->setCellValue ( "D$i", $vv['ct_name']);
    $setActiveSheet->setCellValue ( "E$i", $vv['staff']);
    //unset($nn,$jj);
     
    //$num = count($info['title']);
    $begin = 'F';
    for($t = 1;$t<=3;$t++){
    
    $jj = 0; $nn = 0;$cc = 0;
     
    for($ii=0;$ii<=$num;$ii++){
    $beginstr = ord($begin);
    
    $cel = chr($beginstr+$ii);
    
    if($beginstr+$ii <= 90){
    
    $setActiveSheet ->setCellValue($cel.$i,$vv['data'.$t][$ii]);
    }
    if($beginstr+$ii > 90){
    
    $startnum = '65';
    $char_list=array();
    for($sii=0;$sii<26;$sii++){
    $char=chr(65+$sii);
    $char_list[$sii]=$char;
    }     
    $kkk=((int)$jj/26);
    $cel = chr($startnum +$nn);
    $setActiveSheet ->setCellValue($char_list[$kkk].$cel.$i,$vv['data'.$t][$ii]);//生成单元格数据,同表头
    $nn++;
    if($nn>25){$nn=0;}    
    $jj++;
    }
    }
     
    $i++;
    }
    
    $j++;
    $i = $j;
    }
    
    
    $objPHPExcel->setActiveSheetIndex(0);
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename="终端客户品相分布分析表.xls"');//文件名称
    header('Cache-Control: max-age=0');
    header("Pragma: no-cache");
    $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    $objWriter->save('php://output');
    }
     

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值