利用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 }
首先获取绘制图表的标签、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添加到表格中