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

六、PHPExcel图形报表

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

步骤:
① 准备数据;
② 生成线性表的坐标轴刻度;
③ 绘制线性表框架;
④ 将线性表添加到表格中并生成Excel文件。
核心代码:

$arr = array(
        array('', '一班', '二班', '三班'),
        array('不及格', 20, 30, 40),
        array('良好', 30, 50, 55),
        array('优秀', 15, 17, 20)
    );
    //准备数据 直接加载数组填入单元格内
    $objSheet->fromArray($arr);
    //开始图形代码编写
    //取得绘制图表的标签
    $labels = array(
        new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$B$1', null, 1),//一班
        new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$C$1', null, 1),//二班
        new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$D$1', null, 1),//三班
    );
    //取得图表X轴的刻度
    $xLabels = array(
        new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$A$2:$A$4', null, 3),
    );
    //取得绘图所需的数据
    $datas = array(
        new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$B$2:$B$4', null, 3),//取一班的数据
        new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$C$2:$C$4', null, 3),//取二班的数据
        new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$D$2:$D$4', null, 3),//取三班的数据
    );
    //根据取得的东西做出一个图表框架
    $series = array(
        new PHPExcel_Chart_DataSeries(
            PHPExcel_Chart_DataSeries::TYPE_LINECHART,
            PHPExcel_Chart_DataSeries::GROUPING_STANDARD,
            range(0,count($labels)-1),
            $labels,
            $xLabels,
            $datas
        )
    );
    //设置生成图表所需要的参数
    $layout = new PHPExcel_Chart_Layout();
    $layout->setShowVal(true);
    $title = new PHPExcel_Chart_Title('高一学生成绩分布');
    $legend = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_RIGHT, $layout, false);
    $areas = new PHPExcel_Chart_PlotArea($layout, $series);
    $yTitle = new PHPExcel_Chart_Title('value(人数)');    //生成一个图表
    $chart = new PHPExcel_Chart(
        'line_char',
        $title,
        $legend,
        $areas,
        true,
        false,
        null,
        $yTitle
    );
    //给定图表所在表格中的位置
    $chart->setTopLeftPosition('A7')->setBottomRightPosition('K25');
    //将chart添加到sheet中
    $objSheet->addChart($chart);
    //生成excel文件
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
    $objWriter->setIncludeCharts(true);
    //浏览器输出
    browser_export('Excel2007', 'browser_chart.xlsx');
    $objWriter->save('php://output');

运行后得到的实际效果:


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

tips: 要生成图表,则导出时必须为excel2007及更高的版本!另外就是生成带有图表的excel速度好慢!!!
如果想要生成其他类型的图表,那就好好参考官方文档,多看examples。

七、PHPExcel导入文件
流程:
① 实例化excel读取对象
② 加载excel文件 --> 全部加载 or 选择加载
③ 读取excel文件 --> 全部读取 or 逐行读取

//第一种全部加载并且全部读取 read_all.php
    header('Content-Type:text/html;charset=utf-8');
    //引入读取excel的类文件
    include_once('PHPExcel/PHPExcel/IOFactory.php');
    $filename = dirname(__FILE__).'/export1.xls';
    //加载文件
    $objPHPExcel = PHPExcel_IOFactory::load($filename);
    //全部读取
    //获取excel文件里有多少个sheet
    $sheetCount = $objPHPExcel->getSheetCount();
    for($i=0; $i<$sheetCount; $i++){
        //读取每个sheet里的数据 全部放入到数组中
        $data = $objPHPExcel->getSheet($i)->toArray();
        echo '
';
        print_r($data);
    }

//第二种部分加载并且逐行读取 read_single.php
//自动获取文件的类型提供给phpexcel用
    $fileType = PHPExcel_IOFactory::identify($filename);
    //获取文件读取操作对象
    $objReader = PHPExcel_IOFactory::createReader($fileType);
    $sheetName = array('1年级','2年级');
    //只加载指定的sheet
    $objReader->setLoadSheetsOnly($sheetName);
    //加载文件
    $objPHPExcel = $objReader->load($filename); 
    //逐行读取,循环取sheet
    foreach ($objPHPExcel->getWorksheetIterator() as $sheet) {
        //逐行处理
        foreach ($sheet->getRowIterator() as $row) {
            //逐列读取 剔除表头
            if($row->getRowIndex()<2){
                continue;
            }
            foreach ($row->getCellIterator() as $cell) {
                //获取单元格数据
                $data = $cell->getValue();
                echo $data;
            }
            echo '
'; } echo '
'; }

八、总结

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

启用缓存
默认 --> 按cell占用PHP内存
cache_in_memory_serialized --> 序列化存放PHP内存
cache_in_memory_gzip --> 进一步压缩
cache_in_memory_discISAM --> 存放于硬盘
cache_in_memory_phpTemp --> 存放于临时文件夹
cache_in_memory_memcache --> 存放于memcache中
具体如何使用,可以参考开发者文档。

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