PHPExcel 导出公共方法,可添加样式,纵向合并单元格

PHPExcel 导出公共方法,可根据需要改变行样式,纵向合并单元格


$title = [
     ['field'=>'group_sn','width'=>25,'title'=>'大版单号'],
     ['field'=>'pro_customer_name','width'=>25,'title'=>'客户名'],
     ['field'=>'estimate_completion_time','width'=>25,'title'=>'预计完成时间'],
     ['field'=>'process_end_time','width'=>25,'title'=>'实际完成时间'],
     ['field'=>'device_name','width'=>25,'title'=>'机器'],
     ['field'=>'estimate_printing_time','width'=>25,'title'=>'理论加工时长(分)'],
     ['field'=>'process_time','width'=>25,'title'=>'实际加工时长(分)'],
     ['field'=>'machine_time','width'=>30,'title'=>'分段加工时长(分)'],
     ['field'=>'interval_machine_time','width'=>30,'title'=>'分段加工时间'],
     ['field'=>'plane_num_all','width'=>30,'title'=>'总下机数'],
     ['field'=>'plane_num','width'=>30,'title'=>'分段下机数'],
     ['field'=>'operation_name','width'=>30,'title'=>'机长'],
     ['field'=>'hold_abnormal_reason','width'=>25,'title'=>'hold单原因'],
     ['field'=>'time_difference','width'=>25,'title'=>'超时(分)'],
     ['field'=>'yield_rate','width'=>25,'title'=>'达成率'],
 ];
//样式  示例:字段 time_difference 大于 0 的行,字体颜色为FF0000
$conditions =  [
   [
       'field'=>'time_difference',
       'symbol'=>'gt',
       'value'=>0,
       'style'=>[
           'font' =>['color'=>['rgb' => 'FF0000']]
       ]
   ]
];
//纵向合并单元格  示例:已group_sn字段分组,值相同的合并,include_field(选择字段合并),exclude_field(排除字段合并),可选择多个
$merge_cells  = [
   'field'=>'group_sn', //已该字段为分组,值相同的合并
   'include_field'=>[], //合并选择字段
   'exclude_field'=[
	   'machine_time',
	   'operation_name',
	   'plane_num',
	   'interval_machine_time'
   ], //合并排除字段
];

//调用
exportDataToExcel($title,$data,$exportName,true,false,$conditions,$merge_cells);
/**
 * Excel导出
 * @param array $title
 * @param array $data
 * @param string $fileName 表名
 * @param bool $bold 列名是否加粗
 * @param bool $returnFile 是否下载
 * @param array $conditions 单元格样式
 * 示例 $conditions = array('field'=>'time_difference','symbol'=>'gt','value'=>0,'style'=>array('font' => array('color' => array('rgb' => 'FF0000'),),));
 * @return bool|string
 * @throws PHPExcel_Exception
 * @throws PHPExcel_Reader_Exception
 * @throws PHPExcel_Writer_Exception
 */
function exportDataToExcel($title = array(), $data = array(), $fileName = '', $bold = true,$returnFile = false,$conditions = array(),$merge_cells = array()){
    if (empty($title)) {
        return false;
    }

    if (!empty($merge_cells)){
        $num_arr = array_column($data,$merge_cells['field']);
        $arr = array_count_values($num_arr);
    }

    vendor("Excel.PHPExcel");
    $objPHPExcel = new PHPExcel();
    $count = count($title);
    for ($i = 0; $i < $count; $i++) {
        $i_name = PHPExcel_Cell::stringFromColumnIndex($i);//处理列大于26个的方法
        //设置列宽度
        $objPHPExcel->getActiveSheet()->getColumnDimension($i_name)->setWidth($title[$i]['width']);
        //设置列名
        $objPHPExcel->setActiveSheetIndex(0)->setCellValue($i_name . '1', $title[$i]['title']);
        //列名是否加粗
        if ($bold) {
            $objPHPExcel->getActiveSheet()->getStyle($i_name . '1')->getFont()->setBold(true);
        }
        //设置列名高度
        $objPHPExcel->getActiveSheet()->getRowDimension(1)->setRowHeight(40);
        //设置居中
        $objPHPExcel->getActiveSheet()->getStyle($i_name . '1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle($i_name . '1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle($i_name . '1')->getAlignment()->setWrapText(true);

        //数据处理
        if($data){
            foreach ($data as $key => $item) {
                if (isset($title[$i]['field']) && !empty($item[$title[$i]['field']])){
                    $objPHPExcel->setActiveSheetIndex(0)->setCellValue($i_name . ($key + 2), $item[$title[$i]['field']]);

                    //添加样式
                    if (!empty($conditions)){
                        foreach ($conditions as $condition){
                            if ($condition['field'] == $title[$i]['field']){
                                // gt 表示 > 大于 egt 表示 >= 大于等于 lt 表示 < 小于 elt 表示 <= 小于等于 eq 表示 = 等于 neq 表示 = 不等于”
                                switch ($condition['symbol'])
                                {
                                    case 'gt':
                                        if ($item[$title[$i]['field']] > $condition['value']){
                                            $objPHPExcel->getActiveSheet()->getStyle('A' . ($key + 2) . ':BI' . ($key + 2))->applyFromArray($condition['style']);
                                        }
                                        break;
                                    case 'egt':
                                        if ($item[$title[$i]['field']] >= $condition['value']){
                                            $objPHPExcel->getActiveSheet()->getStyle('A' . ($key + 2) . ':BI' . ($key + 2))->applyFromArray($condition['style']);
                                        }
                                        break;
                                    case 'lt':
                                        if ($item[$title[$i]['field']] < $condition['value']){
                                            $objPHPExcel->getActiveSheet()->getStyle('A' . ($key + 2) . ':BI' . ($key + 2))->applyFromArray($condition['style']);
                                        }
                                        break;
                                    case 'elt':
                                        if ($item[$title[$i]['field']] <= $condition['value']){
                                            $objPHPExcel->getActiveSheet()->getStyle('A' . ($key + 2) . ':BI' . ($key + 2))->applyFromArray($condition['style']);
                                        }
                                        break;
                                    case 'eq':
                                        if ($item[$title[$i]['field']] == $condition['value']){
                                            $objPHPExcel->getActiveSheet()->getStyle('A' . ($key + 2) . ':BI' . ($key + 2))->applyFromArray($condition['style']);
                                        }
                                        break;
                                    case 'neq':
                                        if ($item[$title[$i]['field']] != $condition['value']){
                                            $objPHPExcel->getActiveSheet()->getStyle('A' . ($key + 2) . ':BI' . ($key + 2))->applyFromArray($condition['style']);
                                        }
                                        break;
                                    default:
                                }
                            }
                        }
                    }
                }

                if (!empty($merge_cells)){
                    //纵向合并
                    foreach ($arr as $kk=>$vv) {
                        if($vv>1){
                            $keys = array_keys($num_arr,$kk);
                            $end = $keys[count($keys)-1]+2;
                            $start = $end-$vv+1;
                            //合并排除字段
                            if (!empty($merge_cells['exclude_field']) && !in_array($title[$i]['field'],$merge_cells['exclude_field'])){
                                $objPHPExcel->getActiveSheet()->mergeCells($i_name.$start.":".$i_name.$end);
                            }
                            //合并选择字段
                            if (!empty($merge_cells['include_field']) && in_array($title[$i]['field'],$merge_cells['include_field'])){
                                $objPHPExcel->getActiveSheet()->mergeCells($i_name.$start.":".$i_name.$end);
                            }
                        }
                    }
                }
                //设置居中
                $objPHPExcel->getActiveSheet()->getStyle($i_name . ($key + 2))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
                $objPHPExcel->getActiveSheet()->getStyle($i_name . ($key + 2))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
                $objPHPExcel->getActiveSheet()->getStyle($i_name . ($key + 2))->getAlignment()->setWrapText(true);

            }
        }
    }

    $objPHPExcel->getActiveSheet()->setTitle('Simple');
    $objPHPExcel->setActiveSheetIndex(0);
    $fileName = $fileName ? $fileName : date("Ymd", time());
    if($returnFile){
        $dirPath = '/';//注意要设置为绝对路径
        $newFileName = date('YmdHis').'_'.$fileName;
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
        $objWriter->save($dirPath.'/'.$newFileName);
        return $newFileName;
    }else{
        // excel头参数
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename="' . $fileName . '-' . date('Ymd His') . '.xlsx"');
        header('Cache-Control: max-age=0');
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');//excel5为xls格式,excel2007为xlsx格式
        $objWriter->save('php://output');
        exit;
    }

}

导出效果
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用PHPExcel导出MySQL数据到Excel,首先需要安装并引入PHPExcel库。 步骤如下: 1. 创建一个新的PHP文件,并包含PHPExcel库的文件: ```php require_once 'PHPExcel/PHPExcel.php'; ``` 2. 连接到MySQL数据库: ```php $servername = "localhost"; $username = "root"; $password = "password"; $dbname = "database"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } ``` 3. 执行查询语句获取数据: ```php $sql = "SELECT * FROM tablename"; $result = $conn->query($sql); ``` 4. 新建一个PHPExcel对象并设置一些属性: ```php $objPHPExcel = new PHPExcel(); $objPHPExcel->getProperties() ->setCreator("Your Name") ->setLastModifiedBy("Your Name") ->setTitle("MySQL导出Excel") ->setSubject("MySQL导出Excel") ->setDescription("MySQL数据导出到Excel"); ``` 5. 将数据填充到Excel中: ```php $row = 1; while($row_data = $result->fetch_assoc()) { $col = 0; foreach($row_data as $value) { $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row, $value); $col++; } $row++; } ``` 6. 设置Excel的输出: ```php $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="mysql_export.xls"'); header('Cache-Control: max-age=0'); $objWriter->save('php://output'); ``` 7. 关闭数据库连接: ```php $conn->close(); ``` 以上就是用PHPExcel导出MySQL数据到Excel的简单步骤。根据需要,您可以添加更多的样式和设置来自定义导出的Excel文件。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值