学习笔记_来自慕课网课程——PHPExcel操作(上)

一、 PHPExcel介绍及使用准备
老师说:作为一名PHP程序员,掌握PHPExcel是一项必备技能,因为要开发和维护各种内容管理后台,经常需要将数据做成报表。
准备工作:
① 下载PHPExcel插件
② 提取classes文件夹放到项目目录下,并重命名为PHPExcel。
③ PHP version 5.2.0 or higher
④ wamp环境,本机使用phpstudy集成环境

二、使用PHPExcel导出文件步骤解析
① 新建一个Excel表格 --> 实例化PHPExcel类
② 创建sheet(内置表)--> createSheet()方法,setActiveSheetIndex方法,getActiveSheet方法
③ 填充数据 --> setCellValue()方法
④ 保存文件 -->PHPExcel_IOFactory::createWriter()方法,save()方法。
⑤ 代码实现

getActiveSheet();
    //给当前活动sheet设置名称
    $ObjSheet->setTitle('demo');
    //给当前活动sheet填充数据
    $ObjSheet->setCellValue('A1','姓名')->setCellValue('B1','分数');
    $ObjSheet->setCellValue('A2','张三')->setCellValue('B2','80');
    //按照指定格式生成文件
    $objWriter = PHPExcel_IOFactory::createWriter($ObjPHPExcel,'Excel2007');
    //保存文件
    $objWriter->save($dir.'/demo.xlsx');
 ?>

三、PHPExcel导出MySQL数据库数据

0){
            //创建新的内置表
            $objPHPExcel->createSheet();
        }
        //把新创建的sheet设定为当前活动sheet
        $objPHPExcel->setActiveSheetIndex($i);
        //获取当前活动sheet
        $objSheet = $objPHPExcel->getActiveSheet();
        //设置表名
        $objSheet->setTitle($grade[$i]);
        //设置表头
        $objSheet->setCellValue('A1','序号')->setCellValue('B1','姓名')->setCellValue('C1','班级')->setCellValue('D1','分数');
        //查询各年级的学生信息
        $data = $db->getDataByGrade($grade[$i]);
        $j = 2;
        foreach ($data as $value) {
            $objSheet->setCellValue('A'.$j, $j-1)->setCellValue('B'.$j, $value['name'])->setCellValue('C'.$j, $value['class'].'班')->setCellValue('D'.$j, $value['score']);
            $j++;
        }
    }
    //确保用户打开excel看到的是第一个sheet
    $objPHPExcel->setActiveSheetIndex(0);
    //生成excel文件
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    //保存文件
    $objWriter->save($dir.'/export_1.xls');
 ?>

四、输出至浏览器

//浏览器输出
    browser_export('excel5', 'browser_excel03.xls');
    $objWriter->save('php://output');

    function browser_export($type, $filename){
        if($type == 'Excel5'){
            //告诉浏览器要输出excel03文件
            header('Content-Type: application/vnd.ms-excel');
        }else{
            //告诉浏览器输出excel07文件
            header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        }
        //告诉浏览器输出文件的名称
        header('Content-Disposition: attachment;filename="'.$filename.'"');
        //禁止缓存
        header('Cache-Control: max-age=0');
    }

五、Excel样式控制
以学生信息表为数据源,分为以下几个步骤来实现信息的填充并完善样式。


学习笔记_来自慕课网课程——PHPExcel操作(上)_第1张图片
Paste_Image.png

根据班级和年级查询学生信息
填充学生信息
填充班级和年级
分别合并班级和年级的单元格 $objPHPExcel->getActiveSheet()->mergeCells(‘A1:D1’);
文字居中 setVertical setHorizontal
设置字体
设置背景色
设置边框 applyFromArray();
单元格内换行 先,getAlignment()->setWrapText(true); 然后setCellValue(‘..\n..’) 然后
超长数字的显示,如果不设置,超长数字就要被转为科学计数,要参考手册里的4.6.7 Explicitly set a cell’s datatype。 $objPHPExcel->getActiveSheet()->setCellValueExplicit(‘A1’,$val, PHPExcel_Cell_DataType::TYPE_STRING);
核心代码:

$objPHPExcel = new PHPExcel();
    $db = new db();
    $objSheet = $objPHPExcel->getActiveSheet();
    //开始本小节的代码编写
    $index = 0;
    //查询所有年级
    $gradeInfo = $db->getAllGrade();
    foreach ($gradeInfo as $g_v) {
        $gradeIndex = getCells($index*2);
        $objSheet->setCellValue($gradeIndex.'2', '高'.$g_v['grade']);
        //设置单元格水平和垂直居中
        $objSheet->getDefaultStyle()->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER)->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        //设置默认字体
        $objSheet->getDefaultStyle()->getFont()->setName('微软雅黑')->setSize(14);
        //设置年级所在行的字体及大小
        $objSheet->getStyle('A2:Z2')->getFont()->setSize(20)->setBold(True);
        //设置班级所在行的字体及大小
        $objSheet->getStyle('A3:Z3')->getFont()->setSize(16)->setBold(True);
        $classInfo = $db->getClassByGrade($g_v['grade']);
        foreach ($classInfo as $c_v) {
            $nameIndex = getCells($index*2);
            $scoreIndex = getCells($index*2+1);
            $classIndex = $nameIndex;
            $objSheet->setCellValue($classIndex.'3', $c_v['class'].'班');
            //合并单元格
            $objSheet->mergeCells($classIndex.'3:'.$scoreIndex.'3');
            //设置班级所在行的边框
            $classBorderStyle = getBorderStyle('E351CA');
            $objSheet->getStyle($classIndex.'3:'.$scoreIndex.'3')->applyFromArray($classBorderStyle);
            //填充班级所在行的背景色
            $objSheet->getStyle($classIndex.'3:'.$scoreIndex.'3')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setRGB('52E351');
            $objSheet->setCellValue($nameIndex.'4', '姓名')->setCellValue($scoreIndex.'4', '分数');
            //指定分数这一列默认为文本格式
            $objSheet->getStyle($scoreIndex)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);
            $info = $db->getDataByClassGrade($c_v['class'], $g_v['grade']);
            $j = 5;
            foreach ($info as $val) {
                $objSheet->setCellValue($nameIndex.$j, $val['name'])->setCellValueExplicit($scoreIndex.$j, $val['score'].'3123123123123123213',PHPExcel_Cell_DataType::TYPE_STRING);
                $j++;
            }
            $index++;
        }
        $endGradeIndex = getCells($index*2-1);
        //合并单元格
        $objSheet->mergeCells($gradeIndex.'2:'.$endGradeIndex.'2');
        //填充年级所在行的背景色
    $objSheet->getStyle($gradeIndex.'2:'.$endGradeIndex.'2')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setRGB('E36951');
        //设置边框样式
        $gradeStyle = getBorderStyle('#E3DF51');
        $objSheet->getStyle($gradeIndex.'2:'.$endGradeIndex.'2')->applyFromArray($gradeStyle);
    }

你可能感兴趣的:(学习笔记_来自慕课网课程——PHPExcel操作(上))