YII2框架下使用PHPExcel导出柱状图
导出结果:

首先,到官网下载PHPExcel插件包,下载后文件夹如下:

将Classes文件夹放入到项目公共方法内。

新建控制器(访问导出的方法):EntryandexitController
<?php
namespace app\modules\reportmanagement\controllers;
use Yii;
use yii\web\Controller;
use app\modules\reportmanagement\components\Summaryexport;
class EntryandexitController extends BaseController
{
public function actionIndex(){
//查询需导出的数据
$result = array();
//调用导出方法
Summaryexport::export($result);
}
}
新建控制器(公共方法):Summaryexport
<?php
namespace app\modules\reportmanagement\components;
//引入PHPExcel插件
require dirname(dirname(__FILE__)).'/components/phpexcel/PHPExcel.php';
class Summaryexport
{
public static function export($result){
header("content-type:text/html;charset=utf-8");
error_reporting(E_ALL);
date_default_timezone_set('Europe/London');
//创建sheet工作薄
$objPHPExcel = new \PHPExcel();
$objWorksheet = $objPHPExcel->setActiveSheetIndex(0);
//$result封装(方式选其一即可) -> 此数据可用此方式输出表格或使用单元格赋值两种方式(表格数据)
//方式一
$objWorksheet->fromArray(
array(
array('航次', 'E人数','W人数','总人数','增长率','E商人','W商人','总商人数','团体','一般'),
array('10010','10','12','=SUM(B2:B3)','=SUM((B2:B3)/B3)','10','2','12','12','12'),
array('10020','10','12','=SUM(B2:B3)','=SUM((B2:B3)/B3)','10','2','12','12','12'),
...
)
);
//方式二
//标题
$title_name = "月汇总出入境人数报表";
$objPHPExcel->getActiveSheet()->mergeCells('A1:J1');
$objPHPExcel->getActiveSheet()->SetCellValue('A1', $title_name);
$objPHPExcel->getActiveSheet()->SetCellValue('A2', '航次');
$objPHPExcel->getActiveSheet()->SetCellValue('B2', 'E人数');
$objPHPExcel->getActiveSheet()->SetCellValue('C2', 'W人数');
$objPHPExcel->getActiveSheet()->SetCellValue('D2', '小计');
$objPHPExcel->getActiveSheet()->SetCellValue('E2', '增长率');
$objPHPExcel->getActiveSheet()->SetCellValue('F2', 'E商人');
$objPHPExcel->getActiveSheet()->SetCellValue('G2', 'W商人');
$objPHPExcel->getActiveSheet()->SetCellValue('H2', '小计');
$objPHPExcel->getActiveSheet()->SetCellValue('I2', '团体');
$objPHPExcel->getActiveSheet()->SetCellValue('J2', '一般');
for($i=1;$i<=12;$i++){
$index = 'A'.($i+2);
$index_b = 'B'.($i+2);
$index_c = 'C'.($i+2);
$index_d = 'D'.($i+2);
$index_e = 'E'.($i+2);
$index_f = 'F'.($i+2);
$index_g = 'G'.($i+2);
$index_h = 'H'.($i+2);
$index_i = 'I'.($i+2);
$index_j = 'J'.($i+2);
$prev_index_d = 'D'.($i+1);
$growth_rate = $i == 1?'-':'=SUM(('.$index_d.'-'.$prev_index_d.')/'.$prev_index_d.')';
$objPHPExcel->getActiveSheet()->SetCellValue($index,'一月份');
$objPHPExcel->getActiveSheet()->SetCellValue($index_b, 12);
$objPHPExcel->getActiveSheet()->SetCellValue($index_c, 10);
$objPHPExcel->getActiveSheet()->SetCellValue($index_d, '=SUM('.$index_b.':'.$index_c.')');
$objPHPExcel->getActiveSheet()->SetCellValue($index_e, $growth_rate );
$objPHPExcel->getActiveSheet()->SetCellValue($index_f, 10);
$objPHPExcel->getActiveSheet()->SetCellValue($index_g, 20);
$objPHPExcel->getActiveSheet()->SetCellValue($index_h, '=SUM('.$index_f.':'.$index_g.')');
$objPHPExcel->getActiveSheet()->SetCellValue($index_i, 10);
$objPHPExcel->getActiveSheet()->SetCellValue($index_j, 10)
}
//开始图表
//取得绘制图表的标签(图例项)
$dataseriesLabels = array(
new \PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$D$2', NULL, 1), // '总人数'
new \PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$H$2', NULL, 1), // '商人'
new \PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$I$2', NULL, 1), // '团体'
new \PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$J$2', NULL, 1), // '一般旅客'
);
//取得图表X轴的刻度 (第四个参数值:单元格长度A3-A14)
$xAxisTickValues = array(
new \PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$A$3:$A$14', NULL, 12), // 一月份 to 十二月份
);
//取得绘图所需的数据
$dataSeriesValues = array(
new \PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$D$3:$D$14', NULL, 12),
new \PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$H$3:$H$14', NULL, 12),
new \PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$I$3:$I$14', NULL, 12),
new \PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$J$3:$J$14', NULL, 12),
);
//根据取得的东西做出一个图表框架
$series = new \PHPExcel_Chart_DataSeries(
\PHPExcel_Chart_DataSeries::TYPE_SURFACECHART, // plotType
\PHPExcel_Chart_DataSeries::GROUPING_CLUSTERED, // plotGrouping
range(0, count($dataSeriesValues)-1), // plotOrder
$dataseriesLabels, // plotLabel
$xAxisTickValues, // plotCategory
$dataSeriesValues // plotValues
);
//设置生成图表所需要的参数(坐标是横向或竖向显示:DIRECTION_COL|DIRECTION_BAR)
$series->setPlotDirection(\PHPExcel_Chart_DataSeries::DIRECTION_COL);
$layout = new \PHPExcel_Chart_Layout();
$layout->setShowPercent(TRUE);
$plotarea = new \PHPExcel_Chart_PlotArea($layout, array($series));
$legend = new \PHPExcel_Chart_Legend(\PHPExcel_Chart_Legend::POSITION_RIGHT, NULL, false);
$title = new \PHPExcel_Chart_Title('2018年各渠道购票数对比图');
// $xAxisLabel = new \PHPExcel_Chart_Title('Financial Period'); //X轴标题
$yAxisLabel = new \PHPExcel_Chart_Title('人数 ($k)'); //Y轴标题
$chart = new \PHPExcel_Chart(
'chart1', // name
$title, // title,空为null
$legend, // legend
$plotarea, // plotArea
true, // plotVisibleOnly
0, // displayBlanksAs
null, // xAxisLabel
$yAxisLabel // yAxisLabel
);
//给定图表所在表格中的位置
$chart->setTopLeftPosition('L2');
$chart->setBottomRightPosition('T15');
//将chart添加到sheet中
$objWorksheet->addChart($chart);
//--------------图表end;
$objPHPExcel->getActiveSheet()->setTitle("全年合计");
$filename = '出入境人数报表.xls';
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->setIncludeCharts(TRUE); //图表必须
header("Pragma: public");
header("Expires: 0");
header("Cache-Control:must-revalidate,post-check=0,pre-check=0");
header("Content-Type:application/force-download");
header("Content-Type:application/vnd.ms-execl");
header("Content-Type:application/octet-stream");
header("Content-Type:application/download");
header("Content-Disposition:attachment;filename=".$filename);
header("Content-Transfer-Encoding:binary");
$objWriter->save("php://output");
}
已完结,暂未解决表格数据与图表数据关联。
YII2框架下使用PHPExcel导出柱状图的更多相关文章
- Yii2 框架下 session跨域共享互通
在项目实施过程中,往往把一个大项目进行分拆成几个独立的项目,项目用完全独立的域名和文件,可以放到不同的服务器上的独立分项目. 几个子项目共用一个登录点. 原理简单来说就是服务端session 共享, ...
- 简易的phpexcel导出柱状图
首先得把phpexcel扩展的源码拷贝到项目文件下 下面是代码 /** 引入最重要的PHPExcel类库的入口文件 */ require(STK_PATH.'/class/stk/PHPExc ...
- Yii框架中使用PHPExcel导出Excel文件
最近在研究PHP的Yii框架,很喜欢,碰到导出Excel的问题,研究了一下,就有了下面的方法: 1.首先在config\main.php中添加对PHPExcel的引用,我的方式是这样: 1 2 3 4 ...
- Yii2框架GridView自带导出功能最佳实践
1. 导出excel的实现方法 (1)使用phpexcel封装工具类导出excel (2)使用爬虫爬取页面再处理封装工具类导出excel (3)使用页面渲染后处理html添加头部信息生成excel文件 ...
- Vue框架下实现导入导出Excel、导出PDF
项目需求:开发一套基于Vue框架的工程档案管理系统,用于工程项目资料的填写.编辑和归档,经调研需支持如下功能: Excel报表的导入.导出 PDF文件的导出 打印表格 经过技术选型,项目组一致决定通过 ...
- Yii2 框架下bootstrap 弹窗预览视频等~
Yii2 本身已经引用了'yii\bootstrap\BootstrapAsset',所以使用bootstrap 非常简洁. 1 在PHP页面引用命名空间 use app\assets\AppAsse ...
- asp.net使用MVC4框架基于NPOI做导出数据到Excel表
NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 ...
- Yii2框架那些折磨人的坑
说点闲话 距离上次写博客,已经有一年了.在动手写之前,总是带着深深的罪恶感.被它折磨许久,终于,还是,动手了. 值得庆祝的一件事:最近开始健身了.每天动感单车45分钟,游泳45分钟,真的是(生)爽(不 ...
- SSI框架下,用jxl实现导出功能
SSI框架下,用jxl实现导出功能 先说明一下,这个是SSI框架下,前端用ExtJs,应用在一个企业级的系统中的导出功能,因为是摸索着做的,所以里面有一些代码想整理一下,如果有人看到了,请视自己的架构 ...
随机推荐
- mysql数据库索引优化与实践(一)
前言 mysql数据库是现在应用最广泛的数据库系统.与数据库打交道是每个Java程序员日常工作之一,索引优化是必备的技能之一. 为什么要了解索引 真实案例 案例一:大学有段时间学习爬虫,爬取了知乎30 ...
- 数据库 --> MySQL存储引擎介绍
MySQL存储引擎介绍 MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良.虽然 ...
- DB2开发系列之三——SQL函数
1.内置函数分类(SYSIBM模式内) 1)标量函数:返回一个标量值的函数: 2)聚合函数:也叫列函数,也返回一个标量值,这个值是一组输入值的计算结果:3)表函数:向引用它的 SQL 语句返回一个表: ...
- jdk自带的MD5进行数据的加密与解密
package com.tools.util; import java.io.IOException; import java.io.UnsupportedEncodingException; imp ...
- WebAPI问题追踪日志记录过滤器
公司项目比较坑爹,毕竟涉及到前后端分离.多部门协作,很多时候系统出问题,哪怕已经很清楚了,协作方依然要我们把API调用入参.响应等记录下来,而且是全记录,不光是异常调用,待调查结束后这些日志又需要卸下 ...
- Java虚拟机16:Metaspace
被废弃的持久代 想起之前面试的时候有面试官问起过我一个问题:Java 8为什么要废弃持久代即Metaspace的作用.由于当时使用的Java 7且研究重心不在JVM上,一下没有回答上来,今天突然想起这 ...
- C语言第六次博客作业--数据类型
一.PTA实验作业 题目1:区位码输入法 1. 本题PTA提交列表 2. 设计思路 (1)定义整型变量code放区位码,areacode放区码,digitcode放位码,one放个位数,two放十位数 ...
- Beta预备
团队名称:稳住!我们能赢 Beta预备: 讨论组长是否重选的议题和结论 项目组长可以说是一个团队的灵魂和核心.一个好的领导者可以激发团队成员的工作热情,提高开发效率,保质保量的完成工作.虽然在Alph ...
- 201621123057 《Java程序设计》第8周学习总结
1. 本周学习总结 思维导图归纳总结集合相关内容. 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 ArrayList是允许重复的,但当用它来 ...
- 十款不容错过的Swift iOS开源项目及介绍
1.十款不容错过的Swift iOS开源项目. http://www.csdn.net/article/2014-10-16/2822083-swift-ios-open-source-project ...