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添加到表格中

 

posted @ 2016-01-19 14:34  banshaohuan  阅读(888)  评论(0编辑  收藏  举报