刚开始做项目的时候,遇到了这个需求。说实话,对于一个才出来实习的菜鸟,而且还是才接触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导出就是这么简单,代码不多,甚至少的可怜。但是,经验的分享更重要。

ThinkPHP实现导出的更多相关文章

  1. thinkphp导入导出excel表单数据

    在PHP项目经常要导入导出Excel表单. 先去下载PHPExcel类库文件,放到相应位置. 我在thinkphp框架中的位置为ThinkPHP/Library/Org/Util/ 导入 在页面上传e ...

  2. thinkphp phpexcel导出

    近期做一个项目涉及到商品信息的批量导出与导入,遂记录了下来,框架是tp框架3.2.3(tp5.0性质是一样的,无非是加载方法与所放目录不一样罢了),运用的是phpexcel,闲话不多说,上代码 1.首 ...

  3. thinkphp phpexcel导出返回乱码

    今天做了一个excel文件导出的功能  可是无论怎么改网上怎么搜答案什么缓冲啊charset=UTF-8'a都不起效 <?phpnamespace app\admin\controller;us ...

  4. ThinkPHP实现导出Excel表格

    /** * 导出数据为excel表格 *@param $data 一个二维数组,结构如同从数据库查出来的数组 *@param $title excel的第一行标题,一个数组,如果为空则没有标题 *@p ...

  5. thinkphp中使用PHPEXCEL导出数据

    thinkphp中导出二维数组到Excel 1.解决时间长度导致EXCEL出现###问题 2.解决长数值型 带来的科学记数法导出问题 订单号不再变为科学记数法 而是直接字符串类型 代码如下: < ...

  6. 基于ThinkPHP开发的PHPExcel导出

    首先我们需要去PHPExcel官网下载开源包 下载好了以后只需要把里面的classes文件夹解压出来就可以用了! 在ThinkPHP中,文件的命名空间还是很重要的,我试着按照其他的第三方命名写name ...

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

    首先我强烈推荐看到这篇文章的你将导出文件设置为csv格式的文件 实际测试导出csv文件的速度是excel文件的10几倍左右 首先我先介绍csv文件的导出的方法: 如果你单纯是在数据导出界面上通过用户点 ...

  8. thinkphp实现excel数据的导入导出

    下载地址:phpexcel.rar 实现步骤: 一:在http://phpexcel.codeplex.com/下载最新PHPExcel放到Vendor下,注意位置:ThinkPHP\Extend\V ...

  9. ThinkPHP 整合 PHPExcel ,数据导出功能实现,解决Invalid cell coordinate

    PHPExcel想必大家都不陌生,是用来操作Office Excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言.可以使用它来读取.写入不同格式的电子表格 本次只做数据导出功能的 ...

随机推荐

  1. 拾遗补缺之session,高手请跳过!

    session timeout(单位:分钟)---web.config文件中 session共享时需要使用stateServer模式(web.config中,mode="stateServe ...

  2. Spring MVC JSON 实现JsonSerializer Date类型转换

    转载至:http://blog.csdn.net/lantianzhange/article/details/40920933 在Spring MVC中存在两大类的类型转换,一类是Json,一个是Sp ...

  3. EJB QI查询

    EO.PNAME like ?1 OR  EO.PNAME like ?2";      Query query = entityManager.createNativeQuery(quer ...

  4. TCP/IP的三次握手协议

    关于TCP/IP的三次握手协议,这篇文章中有详细的介绍,很通俗易懂,什么时候忘了,都可以过来瞧两眼,保证很快就明白了. 首先TCP/IP协议分为三个阶段:建立连接(握手阶段),数据传输阶段,连接终止阶 ...

  5. C++中重载、重写(覆盖)和隐藏的区别实例分析

    这篇文章主要介绍了C++中重载.重写(覆盖)和隐藏的区别,是C++面向对象程序设计非常重要的概念,需要的朋友可以参考下 本文实例讲述了C++中重载.重写(覆盖)和隐藏的区别,对于C++面向对象程序设计 ...

  6. 加密传输SSL协议5_Hash Function

    怎么对一个大的文件进行签名,因为文件比较大,非对称签名很慢.那么想,我能把这个大的文件通过一种函数变换,变成一个和源文件唯一对应的的小的文件吗?答案是可以的. Hash Function 这里任何的文 ...

  7. WGS84、GCJ-02(火星坐标)、百度坐标,Web墨卡托坐标

    GCJ-02坐标系统(火星坐标)简介:http://blog.csdn.net/giswens/article/details/8775121(存档:http://mapbd.com/cms/2012 ...

  8. JavaScript装逼指南

    如何写JavaScript才能逼格更高呢?怎样才能组织JavaScript才能让别人一眼看出你不简单呢?是否很期待别人在看完你的代码之后感叹一句“原来还可以这样写”呢?下面列出一些在JavaScrip ...

  9. cookie记录用户的浏览商品的路径

    在电子商务的网站中,经常要记录用户的浏览路径,以判断用户到底对哪些商品感兴趣,或者哪些商品之间存在关联. 下面将使用cookie记录用户的浏览过的历史页面.该网站将每个页面的标题保存在该页面的$TIT ...

  10. 如何获取fragment里的控件

    不能在onCreate函数中获取控件,以为fragment还没有start,你可以在onStart函数中获取: @Overrideprotected void onStart() { super.on ...