zoukankan      html  css  js  c++  java
  • PHPExcel探索之旅---阶段三 绘制图表

    利用PHPExcel插件进行绘制图表

     1 <?php
     2     /**
     3      * 使用PHPExcel插件在excel文件中利用其中的数据建立折线图
     4      * */
     5     $dir = dirname(__FILE__);
     6 
     7     require $dir."/db.php";
     8     require $dir."/PHPExcel/PHPExcel.php";
     9     
    10     $db = new db($phpexcel);//实例化的db类 连接mysql数据库
    11     $objPHPExcel = new PHPExcel();//新建一个PHPEXcel对象
    12     $objSheet = $objPHPExcel -> getActiveSheet();
    13     //填充数据
    14     $array = array(
    15             array("","一班","二班","三班"),
    16             array("不及格",20,30,40),
    17             array("良好",30,50,55),
    18             array("优秀",15,17,20)
    19     );//准备数据
    20     $objSheet -> fromArray($array);//直接加载数组
    21     //开始图表代码练习
    22     $labels = array(
    23             new PHPExcel_Chart_DataSeriesValues('String','Worksheet!$B$1',null,1),
    24             new PHPExcel_Chart_DataSeriesValues('String','Worksheet!$C$1',null,1),
    25             new PHPExcel_Chart_DataSeriesValues('String','Worksheet!$D$1',null,1),
    26     );//先取得绘制图表的标签
    27     $xlabels = array(
    28             new PHPExcel_Chart_DataSeriesValues('String','Worksheet!$A2:$A$4',null,3)//取得图像x轴的刻度
    29     );
    30     
    31     $datas = array(
    32             new PHPExcel_Chart_DataSeriesValues('Number','Worksheet!$B2:$B$4',null,3),
    33             new PHPExcel_Chart_DataSeriesValues('Number','Worksheet!$C2:$C$4',null,3),
    34             new PHPExcel_Chart_DataSeriesValues('Number','Worksheet!$D2:$D$4',null,3)
    35     );//取得绘图所需的数据
    36     
    37     $series = array(
    38             new PHPExcel_Chart_DataSeries(
    39                     PHPExcel_Chart_DataSeries::TYPE_LINECHART,
    40                     PHPExcel_Chart_DataSeries::GROUPING_STANDARD,
    41                     range(0, count($labels) - 1),
    42                     $labels,
    43                     $xlabels,
    44                     $datas
    45             )
    46     );//根据取得的东西做出一个图表的框架
    47     
    48     $layout = new PHPExcel_Chart_Layout();
    49     $layout -> setShowVal(true);
    50     $ytitle = new PHPExcel_Chart_Title("value(人数)");
    51     $areas = new PHPExcel_Chart_PlotArea($layout,$series);
    52     $legend = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_RIGHT,null,false);
    53     $title = new PHPExcel_Chart_Title("高一学生成绩分布");
    54     $chart = new PHPExcel_Chart(
    55         'line_chart',
    56         $title,        
    57         $legend,
    58         $areas,
    59         true,
    60         false,
    61         null,
    62         $ytitle
    63     );//生成图表
    64     $chart -> setTopLeftPosition("A7") -> setBottomRightPosition("K25");//给定图表在表格中的位置
    65     $objSheet -> addChart($chart);//将chart添加到表格中
    66 
    67 
    68 
    69     $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel,"Excel2007");//生成excel文件
    70     $objWriter -> setIncludeCharts(true);
    71     $objWriter -> save($dir."/export_chart.xlsx");//保存到当前目录下面
    72     
    73     
    74     //将Excel文件以浏览器下载的方式输出到浏览器
    75     browser_export('Excel2007', 'browser_excel03.xlsx');
    76     $objWriter -> save("php://output");//输出到浏览器
    77     
    78     
    79     //输出到浏览器的函数
    80     function browser_export($type,$filename){
    81         if("Excel5" == $type){
    82             header('Content-Type: application/vnd.ms-excel');//告诉浏览器将要输出Excel03文件
    83         }else{
    84             header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//告诉浏览器将要输出Excel07文件
    85         }
    86         header('Content-Disposition: attachment;filename="'.$filename.'"');//告诉浏览器将要输出文件的名称
    87         header('Cache-Control: max-age=0');//禁止缓存
    88     }
    chart.php

    首先获取绘制图表的标签、x轴的刻度、绘图所需要的数据,都是以数组形式存在的,用到的是新建对象 

    new PHPExcel_Chart_DataSeriesValues('数据类型','单元格范围',null,数据个数)

    $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),
        );//先取得绘制图表的标签
        $xlabels = array(
                new PHPExcel_Chart_DataSeriesValues('String','Worksheet!$A2:$A$4',null,3)//取得图像x轴的刻度
        );
        
        $datas = array(
                new PHPExcel_Chart_DataSeriesValues('Number','Worksheet!$B2:$B$4',null,3),
                new PHPExcel_Chart_DataSeriesValues('Number','Worksheet!$C2:$C$4',null,3),
                new PHPExcel_Chart_DataSeriesValues('Number','Worksheet!$D2:$D$4',null,3)
        );//取得绘图所需的数据
        

    然后根据取得的东西做出一个图表的框架 需要建立一个新对象PHPExcel_Chart_DataSeries 其中的参数很多,可以参照API中的classes文件夹中的文件

     1     $series = array(
     2             new PHPExcel_Chart_DataSeries(
     3                     PHPExcel_Chart_DataSeries::TYPE_LINECHART,
     4                     PHPExcel_Chart_DataSeries::GROUPING_STANDARD,
     5                     range(0, count($labels) - 1),
     6                     $labels,
     7                     $xlabels,
     8                     $datas
     9             )
    10     );//根据取得的东西做出一个图表的框架

    再次,生成图表,对图表进行一系列的设置,用到的函数很多查看API

     1     //设置在每个点上显示数据的值
     2     $layout = new PHPExcel_Chart_Layout();
     3     $layout -> setShowVal(true);
     4     
     5     $ytitle = new PHPExcel_Chart_Title("value(人数)");//设置在y轴上显示的备注
     6     $areas = new PHPExcel_Chart_PlotArea($layout,$series);
     7     $legend = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_RIGHT,null,false);//设置标签靠右显示
     8     $title = new PHPExcel_Chart_Title("高一学生成绩分布");//设置图表的标题
     9     $chart = new PHPExcel_Chart(
    10         'line_chart',
    11         $title,        
    12         $legend,
    13         $areas,
    14         true,
    15         false,
    16         null,
    17         $ytitle
    18     );//生成图表

    最后设置图表在表格中的位置 用到的函数就是setTopLeftPosition("A7") -> setBottomRightPosition("K25")

    将图表添加到表格中用到的函数为addChart

        $chart -> setTopLeftPosition("A7") -> setBottomRightPosition("K25");//给定图表在表格中的位置
        $objSheet -> addChart($chart);//将chart添加到表格中
  • 相关阅读:
    文件操作
    安全名词
    浏览器并发连接
    acm 2057
    acm 2072
    acm 2084
    acm 2044
    acm 2043
    acm 2032
    acm 2005
  • 原文地址:https://www.cnblogs.com/banshaohuan/p/5142181.html
Copyright © 2011-2022 走看看