TP5.0源生Excel导出
PHPExcel类在TP5里边并不能很好的兼容,使用起来很麻烦。
不像是tp3.2那样直接import()加进来就能new,因为它里边的命名空间找不到。总是说undefined class。
如果是使用composer安装的PHPExcel的话可能好点吧。
因为我是下载下来后直接放到extend里边使用的,感觉不是很好用。
所以为了方便直接写的源生的导出。
tp5在更新了一次之后说明文档上标明,如果能够不使用DB类的情况下不要使用DB类,尽量使用模型进行CURD操作。
但是如果用源生的php代码来导出的话又不能避免,因为需要切割数组。
所以只有用DB类查询出来的数据是数组。如果不使用DB类的话,查询出来的都是对象。并不能很好的去操作。虽然有toArray(),但是有的对象又不支持转换成数组。真尴尬啊!希望tp5在以后的更新中能够优化好 :) 。
不废话了,直接上代码吧。
/*
*
* 商品Excel导出
*
* @author hechengwei <chichiooo@sina.com>
* @version 1.0.0
* @date 2016年12月16日 下午15:47:34
* */
public function goodsExcelExport(){
$data = Db::name('goods')
->field('id_sys_goods,goods_sn,goods_name,cat_id,unit_name,fk_business_area')
->order('id_sys_goods asc')
->select();
foreach($data as $k => $v){
$data[$k]['cat_id'] = Db::name('goods')
->join(config('database.prefix').'category c','c.id = sys_goods.cat_id')
->where('c.id',$v['cat_id'])
->value('c.cat_name');
$data[$k]['fk_business_area'] = Db::name('goods')
->join(config('database.prefix').'business_area b','b.id_business_area = sys_goods.fk_business_area')
->where('b.id_business_area',$v['fk_business_area'])
->value('b.bname');
}
$excelName = '商品信息';
$Header = array('商品id','商品货号','商品名称','商品分类','单位名称','商圈');
$goodsModel = new GoodsModel();
$goodsModel->exportexcel($data,$Header,$excelName);
}
/**
*@author hechengwei <chichiooo@sina.com>
*@version 1.0.0
*@date 2016年12月16日 下午16:10:22
*导出数据为excel表格
*@param $data 一个二维数组,结构如同从数据库查出来的数组
*@param $title excel的第一行标题,一个数组,如果为空则没有标题
*@param $filename 下载的文件名
*@examlpe
*$stu = new Model();
*$arr = $stu -> select();
*exportexcel($arr,array('id','账户','密码','昵称'),'文件名!');
*/
public static function exportexcel($data=array(),$title=array(),$filename='report'){
header("Content-type:application/octet-stream");
header("Accept-Ranges:bytes");
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:attachment;filename=".$filename.date("Y-m-d").".xls");
header("Pragma: no-cache");
header("Expires: 0");
//导出xls 开始
if (!empty($title)){
foreach ($title as $k => $v) {
$title[$k]= $v;
}
$title= implode("\t", $title);
echo "$title\n";
}
if (!empty($data)){
foreach($data as $key=>$val){
foreach ($val as $ck => $cv) {
$data[$key][$ck]= $cv;
}
$data[$key]=implode("\t", $data[$key]);
}
echo implode("\n",$data);
}
}
TP5.0源生Excel导出的更多相关文章
- tp5.0 composer下载phpexcel 实现导出excel 表格
tp5.0 composer下载phpexcel 实现导出excel 表格 1.在下载好的tp5.0 框架里面使用 composer 下载phpexcel 的插件 composer require p ...
- TP5.0 PHPExcel 数据表格导出导入(引)
TP5.0 PHPExcel 数据表格导出导入(引) 今天看的是PHPExcel这个扩展库,Comporse 下载不下来,最后只能自己去github里面手动下载,但有一个问题就是下载下来的PHPExc ...
- 并发编程概述 委托(delegate) 事件(event) .net core 2.0 event bus 一个简单的基于内存事件总线实现 .net core 基于NPOI 的excel导出类,支持自定义导出哪些字段 基于Ace Admin 的菜单栏实现 第五节:SignalR大杂烩(与MVC融合、全局的几个配置、跨域的应用、C/S程序充当Client和Server)
并发编程概述 前言 说实话,在我软件开发的头两年几乎不考虑并发编程,请求与响应把业务逻辑尽快完成一个星期的任务能两天完成绝不拖三天(剩下时间各种浪),根本不会考虑性能问题(能接受范围内).但随着工 ...
- C# Excel导出超出65536行报错 Invalid row number (65536) outside allowable range (0..65535)
C# Excel导出超出65536行报错 Invalid row number (65536) outside allowable range (0..65535) 一:报错 Invalid row ...
- [moka同学笔记]PHPexcel之excel导出和导入
原案例来自http://www.sucaihuo.com/有修改 1.目录结构(文件不用解释,应该都可以看得懂,直接看代码)
- 偷懒小工具 - Excel导出公共类
说明 最近接了一个任务,就是做一个列表的Excel导出功能.并且有很多页面都会使用这个功能. 导出的Excel大体格式如图 很简单的列表,标题加背景色,然后不同类型,显示方式不一样.对齐方式不一样.不 ...
- 转:POI操作Excel导出
package com.rd.lh.util.excel; import java.beans.PropertyDescriptor; import java.io.FileOutputStream; ...
- java反射学习之二万能EXCEL导出
一.EXCEL导出的实现过程 假设有一个对象的集合,现在需要将此集合内的所有对象导出到EXCEL中,对象有N个属性:那么我们实现的方式是这样的: 循环这个集合,在循环集合中某个对象的所有属性,将这个对 ...
- 自己写的java excel导出工具类
最近项目要用到excel导出功能,之前也写过类似的代码.因为这次项目中多次用到excel导出.这次长了记性整理了一下 分享给大伙 欢迎一起讨论 生成excel的主工具类: public class E ...
随机推荐
- 截取UTF-8编码的汉字,最后一个字出现乱码的问题
问题描述 原来字串内容name为下面内容: ######name=杨乃文做DJ,微信公众号FunRadio.什么样的姿态是小丑姿态?2016046###### 需要截取成大小为64的name_rm[6 ...
- Oracle 中 decode 函数用法
Oracle 中 decode 函数用法 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译 ...
- Hibernate简易原生DAO的实现
写在最前: 初学Hibernate,在尝试把JDBC项目移植到Hibernate的过程中,碰到了不少的麻烦,最让人心烦意乱的自然是SQL语句改动造成的代码混乱.其实不难,网上的解决方案有很多, 不过. ...
- C#设置输入框只输入数字
为输入框添加keyPress事件,然后添加代码: || e.KeyChar > ) && e.KeyChar != && e.KeyChar != &&a ...
- Libero 使用拾忆
使用Libero软件进行管脚分配的时候可以使用脚本语言,详细的使用说明见des_constraints_ug.pdf(在Libero安装目录下寻找) 如: set_io srame_oe -REGIS ...
- python 2.7 学习笔记--day1--基础语句和语法
1. 用户交互 鉴于本小节十分的基础,变不多做赘述啦! 1.1 输出第一个程序:"Hello World !" 1.2 输出字符串,重点是去除字符串中的前后的空格,使用strip( ...
- ArrayList和HashSet的Contains()方法(转)
来源: ArrayList和HashSet的Contains()方法 笔试题: package com.champion.test.exam; import java.util.ArrayList; ...
- 功能实现:PLC对LPC的音量控制
设计方案1: 在PLC上,当使用QDial调节音量时,触发QDial的SIGNAL:ValueChange(),对应SLOT向LPC发送自定义键码0x22; 在LPC上,当接收到0x22键码时,执行操 ...
- mysql load data 乱码
解决方案: http://stackoverflow.com/questions/26256421/sql-load-data-infile-utf8-issue 即: load data local ...
- ubuntu-docker-consul-swarm-shipyard-portainer
--- env --- root@node1:~# cat /etc/issueUbuntu 12.04.4 LTS \n \l root@node1:~# docker -vDocker versi ...