php 导出excel 合并单元格功能

贴出核心代码:

/**
     * BOM数据导出
     * @Author: 小枫哥
     * @Date:   2018-10-26 09:15:20
     * @param  $modelfile <p>模板文件</p>
     * @param  $downfileName <p>生成的excel文件</p>
     * @param  $data <p>数据源</p>
     */
    static function phptoexcel($modelfile, $downfileName, $data)
    {
        $filename = $modelfile;
        $modelfile =  "../../ExcelModal/$modelfile";
        // 判断模板文件是否存在
        if(!file_exists($modelfile)){
            die('服务器上没有找到该模板');
        }
    
        include ROOT_PATH.'phpexcel/PHPExcel.php';
        // 判断Excel文件版本类型
        $excelType = PHPExcel_IOFactory::identify( $modelfile );
        if ($excelType == 'Excel5'){
            include_once ROOT_PATH.'PHPexcel/PHPExcel/Reader/Excel5.php';
            include_once ROOT_PATH.'phpexcel/PHPExcel/Writer/Excel5.php';
        }else if ($excelType == 'Excel2007')
        {
            include_once ROOT_PATH.'PHPexcel/PHPExcel/Reader/Excel2007.php';
            include_once ROOT_PATH.'phpexcel/PHPExcel/Writer/Excel2007.php';
        }
    
        // 设置PHPExcel缓存机制
        $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_wincache;
        $cacheSettings = array( 'cacheTime'  => 600 );
        PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
        //创建一个excel对象和一个reader
        $objPHPExcel = new PHPExcel();
        $objReader = PHPExcel_IOFactory::createReader ( $excelType );
        //读取Excel模板
        $objPHPExcel = $objReader->load ( $modelfile );
        
        $objPHPExcel->setActiveSheetIndex(0);
        $sheettmp = $objPHPExcel->getActiveSheet();
        $sheettmp->setCellValue('C4', $data[0]['cVenAbbName']);
        $sheettmp->setCellValue('C5', $data[0]['cColor']);
        $activerow=9;
        $sheettmp-> insertNewRowBefore(10, sizeof($skulist));
        //移除行数
        $sheettmp->removeRow(10, 1);
        foreach ($data as $k => $v) {
        $sheettmp->setCellValue('C'.$activerow, $v['cColor']);
           $activerow++;
        }
        // 合并纵向单元格
        $lastrow = $activerow -1 ;
        $mergecell=array('D','E');//要合并的列
        $value1='';
        $value2='';
        if(sizeof($mergecell)>0){
            foreach ($mergecell as $value){
                $num=0;
                for($i=2;$i<=$lastrow;$i++)
                {
                        $value1=$sheettmp->getCell($value.$i)->getValue();
                        $value2=$sheettmp->getCell($value.($i+1))->getValue();
                    $num++;
                    if($value1<>$value2 or $i==$lastrow){
                        if($num>1){
                            $sheettmp->mergeCells($value.($i-$num+1).':'.$value.($i)); 
                        }
                        $num=0;
                    }
                }
            }
        }
        //直接输出到浏览器
        header("Pragma: public");
                header("Expires: 0");
        header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
        header("Content-Type:application/force-download");
        header("Content-Type:application/vnd.ms-execl");
        header("Content-Type:application/octet-stream");
        header("Content-Type:application/download");
        header('Content-Disposition:attachment;filename="'.$downfileName.'"');
        header("Content-Transfer-Encoding:binary");
                if ($excelType == 'Excel5'){
                $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
        }elseif ($excelType == 'Excel2007')
            {
            $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
                }
        $objWriter->save('php://output');
        echo "<script>window.close;</script>";
            die;
    }

猜你喜欢

转载自blog.csdn.net/qq_39586877/article/details/85160711