ThinkPHP实现导出

  刚开始做项目的时候,遇到了这个需求。说实话,对于一个才出来实习的菜鸟,而且还是才接触PHP的菜鸟而言,实在是有心杀敌,无力回天啊。

最简单的方法,就是网上找一个插件,然后一个本来就十几兆的项目,又增加了两兆多的没有用的东西。最主要的事,直接用插件,还学不会。网上的确有一大堆的PHPExcel的插件,以及和插件有关的文章,但是不是这样的错误就是那样的错误,不是这个最主要的代码没有加上去,就是那个描述不清晰,总之就是一大堆的问题。

然后,狗血的出来了,大神帮我解决我上面说的一大堆的问题时候,跟我说,这个不需要用插件,只要简单的几段函数就可以了。泪崩,花了我好半天的时间,就是那么简单的几句函数。但是,函数简单,不见得函数出现就那么简单。

  废话不多说,开始扒代码。

  首先是项目文件夹(举例WAP),路径: WAP/COMMON/COMMON/function.php(自定义函数放在这里面,可以直接引用)。

  

/**
 * 导出数据为excel表格
 *@param $data    一个二维数组,结构如同从数据库查出来的数组
 *@param $title   excel的第一行标题,一个数组,如果为空则没有标题
 *@param $filename 下载的文件名
 *@examlpe
 *$stu = M (‘User‘);
 *$arr = $stu -> select();
 *exportexcel($arr,array(‘id‘,‘账户‘,‘密码‘,‘昵称‘),‘文件名!‘);
 */
function exportexcel($data=array(),$title=array(),$filename=‘主题活动‘){
    //var_dump($data);die();
    header("Content-type:application/octet-stream");
    header("Accept-Ranges:bytes");
    header("Content-type:applicationnd.ms-excel");
    header("Content-Disposition:attachment;filename=".$filename.".xls");
    header("Pragma: no-cache");
    header("Expires: 0");
    //导出xls 开始
    if (!empty($title)){
        foreach ($title as $k => $v) {
            $title[$k]=iconv("UTF-8", "GB2312",$v);
        }
        $title= implode("\t", $title);
        echo "$title\n";
    }
        if (!empty($data)){
        foreach($data as $key=>$val){
        foreach ($val as $ck => $cv) {
        $data[$key][$ck]=iconv("UTF-8", "GB2312", $cv);
        }
        $data[$key]=implode("\t", $data[$key]);

        }
        echo implode("\n",$data);
        }
}

  

  接着是控制层的代码了(ActivityUserController.class.php):

  /**
    * 导出数据为excel表格
    *@$data为数据
     * @$title_arr为文件头
     * @file_name 名字
     */
    public function excel()
    {
        $xlsModel =  D(‘ActivityUser‘);
        $data  = $xlsModel->getAllUser();
        exportexcel($data,array(‘队员ID‘,‘所属队伍‘,‘队员姓名‘,‘联系方式‘,‘身份标识‘),‘主题活动‘);    //方法名()  直接引用dunction.php的方法
    }

  然后是model层(读取相应的数据)(ActivityUserModel.class.php):

    public function getAllUser()
    {
        $UserInfo=M(‘activity_team_member‘);
        $where[‘activity_delete‘]=1;                    // 过滤条件
        $list = $UserInfo    ->query(‘select ea_activity_team_member.id,ea_activity_team.team_name,user_name,user_tel,case user_identity when 0 then \‘队长\‘ when 1 then \‘组员\‘  end
            as user_identity from ea_activity_activity,ea_activity_team,ea_activity_team_member WHERE ea_activity_team.id=ea_activity_team_member.team_id and ea_activity_activity.id=ea_activity_team.activity_id‘);
        return $list;

    }

  接着是html页面的实现:

    <span class="fr">[ <a href="{:U(‘ActivityUser/excel‘)}" >导出</a> ]</span>

  简单的梳理一下,首先是在common的文件夹里面增加一个function.php文件,这是存在自定义函数的地方。将excel的导出函数放在里面(直接扒上面的代码)。

  在控制器层,定义一个导出excel的方法,同时,定义一个读取数据库的Model层的方法。在这里要提的一点是,我将数据的0和1显示不同的数据(去百度case when),  获取到数据库的数据,接着就是使用自定义的函数了(使用方法: 自定义方法())。

  接着要做的就是在html页面,做一个<a></a>标签的跳转,跳转到自己定义的控制层的方法。

  Thinkphp导出就是这么简单,代码不多,甚至少的可怜。但是,经验的分享更重要。

时间: 2024-11-05 12:23:39

ThinkPHP实现导出的相关文章

thinkphp导入导出excel表单数据

在PHP项目经常要导入导出Excel表单. 先去下载PHPExcel类库文件,放到相应位置. 我在thinkphp框架中的位置为ThinkPHP/Library/Org/Util/ 导入 在页面上传excel文件提交到后台,利用form表单提单即可 <form method="post" enctype="multipart/form-data" action="" > <input type="submit"

ThinkPHP下导出Excel

本方法是利用PHPExcel来解决从数据库导出Excel 首先需要去下载一个PHPExcel放到ThinkPHP目录下的三方类库Extend目录下的Vendor 调用方法      Vendor('PHPExcel.Classes.PHPExcel'); 以一个客栈数据来做演示 代码如下: 1 public function excel(){ 2 //引入PHPExcel库文件 3 Vendor('PHPExcel.Classes.PHPExcel'); 4 //创建对象 5 $excel =

ThinkPHP实现导出Excel表格

/** * 导出数据为excel表格 *@param $data 一个二维数组,结构如同从数据库查出来的数组 *@param $title excel的第一行标题,一个数组,如果为空则没有标题 *@param $filename 下载的文件名 *@examlpe $stu = M ('User'); $arr = $stu -> select(); exportexcel($arr,array('id','账户','密码','昵称'),'文件名!'); */ function exportexc

thinkphp导出excel功能封装

官网http://phpexcel.codeplex.com/下载最新PHPExcel放到tp框架的核心目录ThinkPHP里面的Vendor下 1 public function test(){ 2 $xlsName = "用户"; 3 4 //注意 数组第一个字段必须是小写 数组第二个(列标题)根据你的情况填写 5 $xlsCell = array( 6 array('字段1','账号序列'), 7 array('字段2','登录账户'), 8 array('字段3','账户昵称'

php使用ajax导出CSV或者EXCEl(thinkphp)方法

首先我强烈推荐看到这篇文章的你将导出文件设置为csv格式的文件 实际测试导出csv文件的速度是excel文件的10几倍左右 首先我先介绍csv文件的导出的方法: 如果你单纯是在数据导出界面上通过用户点击生成csv或者excel按钮通过服务器往浏览器输出excel或者csv 如果数据量小的化可以使用这样的方法(这种方法无法使用ajax)网上百度一下一堆介绍 这里有较为详细的方法介绍 和源码 我这里介绍的是 当数据量比较大时比如生成excel或者csv文件可能需要 几分钟这时候我们需要在用户点击生成

thinkphp之Excel的导出

thinkphp之Excel的导出 Excel的导出步骤: 1.下载phpexcel包,置于以下thinkphp框架路径. 内部还有一个文件夹和一个php文件 2.创建excel对象并设置excel对象的属性(ExportALLAction.class.php ); 3.设置excel的行列样式(字体.高宽.颜色.边框.合并等) 4.绘制报表表头 5.将查询数据写入excel 6.设置excel的sheet的名称< 7.设置excel报表打开后初始的sheet 8.设置输出的excel的头参数及

基于ThinkPHP开发的PHPExcel导出

首先我们需要去PHPExcel官网下载开源包 下载好了以后只需要把里面的classes文件夹解压出来就可以用了! 在ThinkPHP中,文件的命名空间还是很重要的,我试着按照其他的第三方命名写namespace但是还是不行,最后我是这么做的 第一步:重命名classes为Excel,并且将文件夹内的PHPExcel.php重命名成PHPExcel.class.php 然后放入到目录文件 然后在控制层导入,直接use的话是会报错找不到类文件的...也许是内核里面的路由问题,于是我是在实例化的时候写

Thinkphp实现excel数据的导入导出

在http://phpexcel.codeplex.com/下载最新PHPExcel放到Vendor下,注意位置:ThinkPHP\Extend\Vendor\PHPExcel\PHPExcel.php. 这几句可能需要修改: //有的需要加反斜杠$objPHPExcel = new \PHPExcel(); $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 实现代码: public function

ThinkPHP导出CSV、Excel

Thinkphp/Library/Think下新文件文件:Csv.class.php <?php namespace Think; class Csv { //导出csv文件 public function put_csv($list,$title){ $file_name="CSV".date("mdHis",time()).".csv"; header ( 'Content-Type: application/vnd.ms-excel'