PHPExcel之快速导出excel的方法

整理资料时, 找到了之前写的通过PHPExcel进行快速导出到Excel的方法, 发上来做个备份. 

附注: 这个方法只是需要调整下表头就可以快速导出, 如果对导出的样式有要求,还需要再修改代码.


1. 调用部分:


include_once('./PHPExcel/PHPExcel.php');
$cell = array(
    array(
        array(
            0 => '编号',
            1 => 'id'
        ),
        array(
            0 => '姓名',
            1 => 'name'
        ),
        array(
            0 => '性别',
            1 => 'sex',
        ),
    ),
);
$data = array(
    array(
        'id' => '1',
        'name' => '张三',
        'sex' => '男',
    ),
    array(
        'id' => '2',
        'name' => '李四',
        'sex' => '女',
    ),
    array(
        'id' => '3',
        'name' => '王五',
        'sex' => '男',
    ),
);
$result = excelDataMerge($cell, $data);
exportToExcel($result, time());


2. 封装部分: 


/**
 * 将表头和数据整合在一起
 * @param array $cell 表头数组
 * @param array $data 数据数组
 * @param int $serialNum 是否将序号重排
 * @return array|bool 返回整合好的数组
 */
function excelDataMerge($cell, $data, $serialNum=1){
    // 如果表头不是一行,则暂不考虑
    if(count($cell) != 1){
        return false;
    }
    $columnNum = count($cell[0]);                     // 3
    $rowNum = count($cell) + count($data);        // 1+3=4
    $result = array();
    for($i=0;$i<$rowNum;$i++){
        for($j=0;$j<$columnNum;$j++){
            if($i == 0){
                $result[$i][$j] = $cell[0][$j][0];
            }else{
                $result[$i][$j] = $data[$i-1][$cell[0][$j][1]];
                // 这里默认第一列是序号列,默认将序号列重排
                if($serialNum == 1){
                    $result[$i][0] = $i;
                }
            }
        }
    }
    return $result;
}
/**
 * 通过PHPExcel进行表格导出
 * @param array $data 要带出的数据
 * @param string $title 导出的文件名
 * @throws PHPExcel_Exception
 * @throws PHPExcel_Reader_Exception
 * @throws PHPExcel_Writer_Exception
 */
function exportToExcel($data, $title){
    // 数据的行数
    $rowNum = count($data);
    // 数据的列数
    $columnNum = count($data[0]);
    $cellKey = 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',
        'AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM',
        'AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ'
    );
    // 创建PHPExcel对象
    $objPHPExcel = new PHPExcel();
    // 设置默认的字体大小
    $objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(10);
    // 设置所有行的默认行高
    $objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(20);
    // 设置所有列的默认宽度
    $objPHPExcel->getActiveSheet()->getDefaultColumnDimension()->setWidth(20);
    // 设置默认的边框
    $objPHPExcel->getActiveSheet()->getStyle('A1:'.$cellKey[$columnNum-1].$rowNum)->getBorders()->getAllBorders()
        ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
    // 设置默认的垂直、水平居中
    $objPHPExcel->getActiveSheet()->getStyle('A1:'.$cellKey[$columnNum-1].$rowNum)->getAlignment()
        ->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER)
        ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
    // 设置表头的字体加粗
    $objPHPExcel->getActiveSheet()->getStyle('A1:'.$cellKey[$columnNum-1].'1')->getFont()->setBold(true); //粗体
    // 设置数据
    foreach($data as $key=>$value){
        // 设置字段值
        foreach($value as $k=>$v){
            $objPHPExcel->getActiveSheet()->setCellValue($cellKey[$k] . ($key+1), $v);
        }
    }
    //sheet命名
    $objPHPExcel->getActiveSheet()->setTitle('sheet1');
    //默认打开的sheet
    $objPHPExcel->setActiveSheetIndex(0);
    //excel头参数
    header("Content-Type:application/vnd.ms-execl");
    header('Content-Disposition:attachment;filename='.$title.'.xls');//日期文件名后缀
    header('Cache-Control:max-age=0');
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); //Excel2007为xlsx
    $objWriter->save('php://output');
}


原文地址: http://laoliu.pro/article/33

老刘博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论
  • 老刘博客 laoliu.pro © 2018-2019 版权所有
  • 辽ICP备19003301号-1