phpExcel

业务场景经常会遇到excel导出的需求,这时候引用phpExcel是不错的选择。针对有特殊显示需求的excel,我封装了一个导出的函数。

phpExcel下载传送门 http://phpexcel.codeplex.com/releases/view/119187


<?php
class Excel_model{
    public function __construct()
    {
        include_once('PHPExcel/IOFactory.php');
        include_once('PHPExcel.php');
    }

    public function demo(){
        $data = array(
            '0' => array(
                'cell' => 'A1', //标签位置
                'value' => 'hi', //填充内容 string或array格式
                'bg_color' => '00E0EEE0', //标签背景颜色
                'vertical_center' => true, //垂直居中
                'horizontal_center' => true, //水平居中
            ),
            '1' => array(
                'cell' => 'B2:C3', //标签位置
                'value' => array( //填充内容 string或array格式
                    array(
                        'text' => "hello\n",
                        'color' => '0076EE00'
                    ),
                    array(
                        'text' => "world",
                        'color' => '00EE4000'
                    ),
                ),
                'vertical_center' => true, //垂直居中
                'border' => true, //标签边框
            )
        );
        $this->export_data('test', $data);
    }

    public function export_data($file_name,$data){
        $objPHPExcel = new PHPExcel();
        foreach ($data as $key => $item){
            if (!isset($item['value']) || !isset($item['cell'])){
                continue;
            }
            if (preg_match('/^[A-Z]*[1-9][0-9]*$/',$item['cell'])){
                $merge_flag = 0;
                $cell = $item['cell'];
            } elseif(preg_match('/^[A-Z]*[1-9][0-9]*:[A-Z]*[1-9][0-9]*$/',$item['cell'])){
                $merge_flag = 1;
                $cell_array = explode(':',$item['cell']);
                $cell = $cell_array[0];
            } else{
                continue;
            }

            $objRichText = new PHPExcel_RichText();
            $wap_flag = 0;
            if (is_array($item['value'])){
                foreach($item['value'] as $value){
                    $objPayable = $objRichText->createTextRun($value['text']);
                    //字体颜色
                    if (isset($value['color']) && $value['color']){
                        $objPayable->getFont()->setColor( new PHPExcel_Style_Color($value['color'] ) );
                    }
                    //检测换行符
                    if (strpos($value['text'], "\n")){
                        $wap_flag = 1;
                    }
                }
            } else{
                $objRichText->createTextRun($item['value']);
                //检测换行符
                if (strpos($item['value'], "\n")){
                    $wap_flag = 1;
                }
            }
            $objPHPExcel->getActiveSheet()->getCell($cell)->setValue($objRichText);
            if ($wap_flag){
                $objPHPExcel->getActiveSheet()->getStyle($item['cell'])->getAlignment()->setWrapText(true);
            }

            //垂直居中
            if (isset($item['vertical_center']) && $item['vertical_center']){
                $objPHPExcel->getActiveSheet()->getStyle($item['cell'])->applyFromArray(array('alignment'=>array('vertical'=>PHPExcel_Style_Alignment::VERTICAL_CENTER)));
            }
            //水平居中
            if (isset($item['horizontal_center']) && $item['horizontal_center']){
                $objPHPExcel->getActiveSheet()->getStyle($item['cell'])->applyFromArray(array('alignment'=>array('horizontal'=>PHPExcel_Style_Alignment::HORIZONTAL_CENTER)));
            }

            //单元格合并
            if ($merge_flag){
                $objPHPExcel->setActiveSheetIndex(0)->mergeCells($item['cell']);
            }
            //边框
            if (isset($item['border']) && $item['border']){
                $objPHPExcel->getActiveSheet()->getStyle($item['cell'])->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
                $objPHPExcel->getActiveSheet()->getStyle($item['cell'])->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
                $objPHPExcel->getActiveSheet()->getStyle($item['cell'])->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
                $objPHPExcel->getActiveSheet()->getStyle($item['cell'])->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

            }

            //标签颜色
            if (isset($item['bg_color']) && $item['bg_color']){
                $objPHPExcel->getActiveSheet()->getStyle($cell)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
                $objPHPExcel->getActiveSheet()->getStyle($cell)->getFill()->getStartColor()->setARGB($item['bg_color']);
            }

        }
        
        $objWriter = IOFactory::createWriter($objPHPExcel, 'Excel5');
        //发送标题强制用户下载文件
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename='.$file_name.'.xls');
        header('Cache-Control: max-age=0');
        $objWriter->save('php://output');
    }
}
?>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值