我不生产代码
我只是代码的搬运工

php使用phpexcel 导出数据,支持超过26列

      在使用php的时候,经常需要将数据导出到excel中,但是每次都要去查询一次文档重新写一次,特别麻烦,所以这里将php导出到excel进行了封装,只需要一个函数就可以将数据轻松导入到excel中。

      在使用之前,需要先下载phpExcel,可以在http://phpexcel.codeplex.com/releases中下载。 

      本函数支持一个excel文件生成多个sheet,并生成不同的sheet名字。

      导出数据最多支持26x26=676列。

/**
 *  导出Excel,支持多个sheet,每个 sheet 最多26*26列
 *
 * @param array $data  数据 array('key'=>array('header'=>array('', '', ''), 'sheet_name'=>'', 'data'=>array(array('',''), array('', ''))));
 * @param string $file  文件名
 */
function excel($data, $file=''){
    $rows=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');
    $rowsLength = count($rows);

    import('Common.Org.excel');
    $objPHPExcel = new PHPExcel();  //创建PHPExcel实例

    $index = 0;
    $objPHPExcel->setActiveSheetIndex($index);           //设置sheet的起始位置
    foreach($data as $sheet=>$val){
        $header = $val['header'];
        $n = 1;  //列索引,定义一个 k 变量,目的是在循环输出数据是控制行数
        $i = 0;  //字母索引
        if($index>0){
            $objPHPExcel->createSheet();   //创建一个新的工作空间(sheet)
        }

        $newRow = $rows;
        if (count($header) > count($rows)) {  //列超过26列
            foreach ($rows as $k=>$v) {
                foreach ($rows as $_k=>$_v) {
                    if (count($newRow) < count($header)) {
                        $newRow[] = $v.$_v;
                    } else {
                        break;
                    }
                }
            }
        }

        if (count($newRow) < count($header)) {
            die('数据最多不能超过'.pow($rowsLength, 2). '列');
        }

        if ($header) {
            foreach($header as $k=>$v){
                $letter = $newRow[$i++];
                $objPHPExcel->setActiveSheetIndex($index)->setCellValue($letter.$n, $v);
                if(isset($style['Horizontal'])){
                    $objPHPExcel->getActiveSheet()->getStyle($letter.$k)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
                }
            }
            $n++;
        }

        if($val['data']){
            foreach($val['data'] as $k=>$v){
                $i = 0;
                foreach($v as $v1){
                    $letter = $newRow[$i++];
                    $objPHPExcel->setActiveSheetIndex($index)->setCellValue($letter.$n, $v1);
                }
                $n++;
            }
        }
        if($val['sheet_name']){
            $objPHPExcel->setActiveSheetIndex($index)->setTitle($val['sheet_name']);      //设置sheet的名称
        }
        $index++;
    }

    $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');   //通过PHPExcel_IOFactory的写函数将上面数据

    if(!$file){
        $file = date('YmdHis').rand(1000, 9999).'.xlsx';
    }

    // Redirect output to a client’s web browser (Excel2007)
    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header('Content-Disposition: attachment;filename="'.$file.'"');
    header('Cache-Control: max-age=0');
    // If you're serving to IE 9, then the following may be needed
    header('Cache-Control: max-age=1');

    // If you're serving to IE over SSL, then the following may be needed
    header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
    header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
    header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
    header ('Pragma: public'); // HTTP/1.0

    $objWriter->save('php://output');
}


本文章为本站原创,如转载请注明文章出处:https://www.sviping.com/archives/22

分享到:
上一篇: nginx配置location总结及rewrite规则写法 下一篇: PHP 闭包(Closure)初探
12