导出结果:

首先,到官网下载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导出柱状图的更多相关文章

  1. Yii2 框架下 session跨域共享互通

    在项目实施过程中,往往把一个大项目进行分拆成几个独立的项目,项目用完全独立的域名和文件,可以放到不同的服务器上的独立分项目. 几个子项目共用一个登录点. 原理简单来说就是服务端session 共享, ...

  2. 简易的phpexcel导出柱状图

      首先得把phpexcel扩展的源码拷贝到项目文件下 下面是代码   /** 引入最重要的PHPExcel类库的入口文件 */ require(STK_PATH.'/class/stk/PHPExc ...

  3. Yii框架中使用PHPExcel导出Excel文件

    最近在研究PHP的Yii框架,很喜欢,碰到导出Excel的问题,研究了一下,就有了下面的方法: 1.首先在config\main.php中添加对PHPExcel的引用,我的方式是这样: 1 2 3 4 ...

  4. Yii2框架GridView自带导出功能最佳实践

    1. 导出excel的实现方法 (1)使用phpexcel封装工具类导出excel (2)使用爬虫爬取页面再处理封装工具类导出excel (3)使用页面渲染后处理html添加头部信息生成excel文件 ...

  5. Vue框架下实现导入导出Excel、导出PDF

    项目需求:开发一套基于Vue框架的工程档案管理系统,用于工程项目资料的填写.编辑和归档,经调研需支持如下功能: Excel报表的导入.导出 PDF文件的导出 打印表格 经过技术选型,项目组一致决定通过 ...

  6. Yii2 框架下bootstrap 弹窗预览视频等~

    Yii2 本身已经引用了'yii\bootstrap\BootstrapAsset',所以使用bootstrap 非常简洁. 1 在PHP页面引用命名空间 use app\assets\AppAsse ...

  7. asp.net使用MVC4框架基于NPOI做导出数据到Excel表

    NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 ...

  8. Yii2框架那些折磨人的坑

    说点闲话 距离上次写博客,已经有一年了.在动手写之前,总是带着深深的罪恶感.被它折磨许久,终于,还是,动手了. 值得庆祝的一件事:最近开始健身了.每天动感单车45分钟,游泳45分钟,真的是(生)爽(不 ...

  9. SSI框架下,用jxl实现导出功能

    SSI框架下,用jxl实现导出功能 先说明一下,这个是SSI框架下,前端用ExtJs,应用在一个企业级的系统中的导出功能,因为是摸索着做的,所以里面有一些代码想整理一下,如果有人看到了,请视自己的架构 ...

随机推荐

  1. 二分查找(binary search)java实现及时间复杂度

    概述 在一个已排序的数组seq中,使用二分查找v,假如这个数组的范围是[low...high],我们要的v就在这个范围里.查找的方法是拿low到high的正中间的值,我们假设是m,来跟v相比,如果m& ...

  2. CorelDraw X8 破解激活问题

    在为X8使用特殊辅助手段激活时,通过菜单“帮助”-“产品详细信息”页中的“我有序列号”链接打开对话框,输入序列号激活. 然而,由于安装时要求联网登陆,很有可能获取了试用序列号,导致点击链接后,输入对话 ...

  3. ELK学习笔记(三)单台服务器多节点部署

    一般情况下单台服务器只会部署一个ElasticSearch node,但是在学习过程中,很多情况下会需要实现ElasticSearch的分布式效果,所以需要启动多个节点,但是学习开发环境(不想开多个虚 ...

  4. DotNetBar控件,superTabControl多文档界面(MDI)的风格、多Tab的创建方法

    最近在做一个条码系统的项目,第一次用dotnetbar控件,,查找资料时看到伍老师一篇文章(链接),但是没有关于加载tab窗口的方法,自己摸索做了一个此类风格出来,并写了一个通用方法,供大家参考. 风 ...

  5. nuxt 的一些报错和插件推荐

    1.项目有启动报这个错误的,是因为node版本太低了,nuxt要求node版本要达到8.0.0以上 . 2.插件推荐

  6. Android学习链接大放送

    虽然贴链接这种事情..真是一种很偷懒的做法... 但是我一个小菜鸟,果断还是要以多向别人学习为主... 好资源要和大家分享对不对! 况且..放博客里..比收藏夹的利用几率要大一点! 原作者应该也很喜欢 ...

  7. 第 8 章 IO库

    第 8 章 IO库 标签: C++Primer 学习记录 IO库 第 8 章 IO库 8.1 IO类 8.2 文件输入输出 8.1 string流 8.1 IO类 IO对象无拷贝或赋值,因此不能将形参 ...

  8. hibernate框架学习笔记9:多对多关系案例

    员工与角色案例: 一个员工可以是多种角色(总监,经理),一种角色可以是多个员工(保洁) 这里发现无法使用外键表达关系,多对多总是创建第三张表来维护关系 这张表至少两列,都是外键,分别引用两张表的主键 ...

  9. JavaScript(第二十四天)【事件对象】

    JavaScript事件的一个重要方面是它们拥有一些相对一致的特点,可以给你的开发提供更多的强大功能.最方便和强大的就是事件对象,他们可以帮你处理鼠标事件和键盘敲击方面的情况,此外还可以修改一般事件的 ...

  10. C语言-第一次作业

    题目6-1 计算两数的和与差 1.设计思路 (1)主要描述题目算法 第一步:看主函数知道程序输入浮点型变量a,b,通过函数计算输出和与差. 第二步:函数部分将a赋值op1,b赋值op2,&su ...