一、封装 Excel 导出类

include/components/ExecExcel.php

<?php
/***
 * @Excel 导入导出类。
 */
class ExecExcel {
    /***
     * @导出方法
     * @$font excel第一行的提示信息,
     *        要求:一定要与数据库中取出的字段对应
     * $data 数据库取出的数据
     *        要求:只能传递需要导出的字段,否则会数据错乱。
     */
    public static function Export($font,$data){
        //@获得对象
        $Obj=ExecExcel::getObject();
        //@获得当前活动 sheet 操作对象
        $objSheet=$Obj->excel->getActiveSheet();
        //@获得操作的表格字母
        $letter=$Obj->getLetter($font);
        //@设置当前 sheet 名称
        $objSheet->setTitle("dakayungou");
        //@Excel写入头部提示信息
        foreach ($font as $ak=>$av){
            $objSheet->setCellValue($letter[$ak].'1',$av);
        }
        //@Excel写入数据
        foreach ($data as $dk=>$dv){
            $num=$dk+2;
            $dv=array_values($dv);
            foreach ($dv as  $k=>$d){
                //@自动设置单元格宽度
                $objSheet -> getColumnDimension($letter[$k]) -> setAutoSize(true);
                //@设置单元格为文本格式
                $objSheet->getStyle($letter[$k])->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);
                $objSheet->setCellValueExplicit($letter[$k].$num,$d,PHPExcel_Cell_DataType::TYPE_STRING);
            }
        }
        //@销毁变量
        unset($data);
        unset($font);
        //@header头声明为下载
        header('Content-Type:application/vnd.ms-excel');
        header('Content-Disposition:attachment;filename=demo.xls');
        header('Cache-Control:max-age=0');
        //@传入当前实例对象,生成指定格式文件
        $objWrite=PHPExcel_IOFactory::createWriter($Obj->excel,'Excel5');
        //@输出到浏览器
        $objWrite->save("php://output");

    }
    //@获取对应字母方法
    protected function getLetter($font){
        //@生成26个字母
        $letter=range('A','Z');
        //@计算字母长度
        $letter_long=count($letter);
        //@存储遍历好的数据
        $array=array();
        //@遍历数组
        foreach ($font as $k=>$f){
            $temp='';
            //@如果长度大于26
            $last=substr($k/$letter_long,0,1);
            if($last>0){
                $temp.=$letter[$last-1];
            }
            $temp.=$letter[$k%$letter_long];
            $array[$k]=$temp;
        }
        //@销毁变量
        unset($font);
        //@返回拼接好的数组
        return $array;
    }
    //@用来存储该对象
    private  static $object;
    //@用来保存Excel对象
    protected $excel=null;
    //@
    //@
    private function __construct(){
        Yii::import('application.vendors.*');
        require 'PHPExcel.php';
        $this->excel= new PHPExcel();
    }
    //@私有克隆
    private function __clone(){
    }
    //@获取对象方法
    public static function getObject(){
        if(self::$object instanceof self){
            return self::$object;
        }else{
            return self::$object=new self;
        }
    }
}

二、封装执行sql文件

include/components/ExecSql.php

<?php
/***
 * @执行 sql 类。
 */
class ExecSql {
    //@执行sql方法【获取所有】
    public static function All($sql){
        //@获得数据库对象
        $connection = Yii::app()->db;
        //@执行传递过来的sql
        return $connection->createCommand($sql)->queryALL();
    }
    //@执行sql方法【获取第一条】
    public static function One($sql){
        //@获得数据库对象
        $connection = Yii::app()->db;
        //@执行传递过来的sql
        return $connection->createCommand($sql)->queryRow();
    }
}

三、控制器层代码

<?php 

class OrderController extends JController
{
    public function actionExport()
    {
        //@获得下载的数据id
        $ids=isset($_POST['ids'])?htmlentities($_POST['ids']):0;
        //@判断id合法性
        if (!$ids) {
            $this->error("参数错误请重试");
            die;
        }
        //@去除两边的逗号
        $ids=trim($ids,',');
        //@拼接sql
        $sql='select name,phone,first,second,third,address,remark,orderno from `orders_win` where id in('.$ids.')';
        //@获取所有数据
        $all=ExecSql::All($sql);
        //@判断数据合法性
        if(empty($all)){
            $this->error("参数错误请重试");
            die;
        }
        //@excel第一行显示信息
        $font=array('姓名','联系号码','省','市','区','地址','备注','订单号');
        //@调用导出
        ExecExcel::Export($font,$all);
    }
}

结束。

php动态导出数据成Excel表格的更多相关文章

  1. 导出数据到Excel表格

    开发工具与关键技术:Visual Studio 和 ASP.NET.MVC,作者:陈鸿鹏撰写时间:2019年5月25日123下面是我们来学习的导出数据到Excel表格的总结首先在视图层写导出数据的点击 ...

  2. Java操作Jxl实现导出数据生成Excel表格数据文件

    实现:前台用的框架是Easyui+Bootstrap结合使用,需要引入相应的Js.Css文件.页面:Jsp.拦截请求:Servlet.逻辑处理:ClassBean.数据库:SQLserver. 注意: ...

  3. Python导出数据到Excel表格-NotImplementedError: formatting_info=True not yet implemented

    在使用Python写入数据到Excel表格中时出现报错信息记录:“NotImplementedError: formatting_info=True not yet implemented” 报错分析 ...

  4. PHP批量导出数据为excel表格

    之前用插件phoexcel写过批量导入数据,现在用到了批量导出,就记录一下,这次批量导出没用插件,是写出一个表格,直接输出 //$teacherList 是从数据库查出来的二维数组 $execlnam ...

  5. spring boot 使用POI导出数据到Excel表格

    在spring boot 的项目经常碰到将数据导出到Excel表格的需求,而POI技术则对于java操作Excel表格提供了API,POI中对于多种类型的文档都提供了操作的接口,但是其对于Excel表 ...

  6. Excel VBA ——如何导出数据到excel表格

    sub OutPut() Dim FileTitle, MyPath, MyFullName As String Application.ScreenUpdating = false '关闭表格公式的 ...

  7. Java导出数据生成Excel表格

    事先准备: 工具类: package com.wazn.learn.util.export; import java.sql.Connection; import java.sql.DriverMan ...

  8. PHP:引用PhpExcel导出数据到excel表格

    我使用的是tp3.2框架(下载地址:http://www.thinkphp.cn/topic/38123.html) 1.首先要下载PhpExcel类库,放在如下图目录下 2.调用方法 public ...

  9. pl/sql developer导出数据到excel的方法

    http://yedward.net/?id=92 问题说明:使用pl/sql developer导出数据到excel表格中是非常有必要的,一般的可能直接在导出的时候选择csv格式即可,因为该格式可以 ...

随机推荐

  1. [Codeforces 911F] Tree Destruction 解题报告(贪心)

    题目链接: http://codeforces.com/contest/911/problem/F 题目大意: 给你一棵树,每次挑选这棵树的两个度数为1的点,加上他们之间的边数(距离),然后将其中一个 ...

  2. 使用JS方法使页面滚动到指定元素+优化+API介绍(动画)

    前言 当页面最上部有顶部菜单是,使用锚点跳转的方法很容易挡住想要呈现的内容(如下图技能两个字被挡住了一半),为避免出现这样的问题,故滚动到指定元素使用用JS的方法来实现. 目录 使用的API简介 初版 ...

  3. 引用axiv文献的问题

    首先找了一下对8种常见引用格式进行说明的文章 https://blog.csdn.net/wkd22775/article/details/51798927 然后就是水木社区大神们的记录http:// ...

  4. IE6 css fixed

    .fixed-top{position:fixed;bottom:auto;top:0px;} .fixed-bottom{position:fixed;bottom:0px;top:auto;} . ...

  5. Dropout 下(关于《Dropout: A Simple way to prevent neural networks from overfitting》)

    先上菜单: 摘要: Deep neural nets with a large number of parameters are very powerful machine learning syst ...

  6. 字符串格式化输出、while循环、运算符、编码

    1.字符串格式化输出 %占位符: %s => 字符串 %d=>整数型 %%=>转义 普通的% %()不能多,不能少,一一对应 f"{}"大括号里的内容一般都放变量 ...

  7. HDU-5009 Paint Pearls 动态规划 双向链表

    题目链接:https://cn.vjudge.net/problem/HDU-5009 题意 给一串序列,可以任意分割多次序列,每次分割的代价是被分割区间中的数字种数. 求分割区间的最小代价.n< ...

  8. CodeForces-766D Mahmoud and a Dictionary 并查集 维护同类不同类元素集合

    题目链接:https://cn.vjudge.net/problem/CodeForces-766D 题意 写词典,有些词是同义词,有些是反义词,还有没关系的词 首先输入两个词,需要判断是同义还是是反 ...

  9. centos7-centos6常用配置对比

    设置(CentOS 6 vs CentOS 7)系统常用配置 ysvinit vs Upstart vs Systemd) 常见设置: 字符集CentOS 6方法:/etc/sysconfig/i1 ...

  10. Java基础学习总结(1)——equals方法

    一.equals方法介绍 1.1.通过下面的例子掌握equals的用法 package cn.galc.test; public class TestEquals { public static vo ...