OneThink+PHPExcel灵活适应导出数据Excel表(导出)
来源:互联网 发布:淘宝uv价值公式 编辑:程序博客网 时间:2024/05/17 01:51
OneThink是ThinkPHP的内容管理框架,就是说ot是最终产品与框架之间的过渡产物.大家有兴趣可以去下载OneThink玩一玩.有这个框架,基本就可以不用写后台管理页面了.
进入正题,首先下载phpExcel, 复制到Think/Library/Vendor目录下,然后,就可以进行你的表演了。在使用的过程中,
可能会出现一些问题,下面记录下我直接遇到的一些问题,后面直接上代码,看代码的直接往后拉就ok。
- 出现Class XMLWriter not found,这个问题在执行导出函数的时候出现,原因是因为php没有装XMLWriter扩展,装上扩展就ok.
- 导出的excel文件是乱码, 在导出函数ExportExcel里面的header前面加上 ob_end_clean();清除缓冲区,可以有效避免乱码.
- 额,不记得还遇到什么了.......
直接上代码吧,先看看最初是怎么处理的:
function company() { /** * 学生名单导出 */ $student = M('Student'); $data = $student->select(); $list = array(); $list1 = array(); foreach($data as $v) { $list1[0] = $v['id']; $list1[1] = $v['name']; $list1[2] = $v['sex']; $list1[3] = $v['score']; $list1[4] = $v['age']; array_push($list, $list1); } $headArr = array('id','姓名','性别','分数','年龄'); $fileName = "Student"; $xlsTitle = '学生表'.date('_YmdHis');// 文件名称可根据自己情况设定 $this->exportExcel($fileName,$headArr,$list,$xlsTitle);} /* * 导出函数 * $expTitle 表名 * $expCellName 列名 (表头) * $expTableData 数据array格式 * $fileName 导出的excel文件名 * */ //$expTitle=>表的主题,$expCellName=>表头名(列名),$expTableData=>数据(以下采用数字索引数组) public function exportExcel($expTitle,$expCellName,$expTableData,$fileName) { $xlsTitle = iconv('utf-8', $expTitle);//文件名称 $cellNum = count($expCellName); //多少列 $dataNum = count($expTableData); //多少行 vendor("PHPExcel.PHPExcel"); $objPHPExcel = new \PHPExcel(); //初始化 $cellName = array('A','B','C','D','E','F','G','H','I','J','K','L', 'M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AA', 'AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN', 'AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ'); $objPHPExcel->getActiveSheet(0)->mergeCells('A1:'.$cellName[$cellNum-1].'1');//合并单元格 $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', $fileName); //标题 for($i=0;$i<$cellNum;$i++){ //表头(列名) $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].'2', $expCellName[$i]); } // Miscellaneous glyphs, UTF-8 for($i=0;$i<$dataNum;$i++){ for($j=0;$j<$cellNum;$j++){ //内容 $objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j].($i+3), $expTableData[$i][$j]); } } ob_end_clean();//清除缓冲区,避免乱码 header('Content-Type: application/vnd.ms-excel'); header('pragma:public'); //attachment新窗口打印inline本窗口打印 header("Content-Disposition:attachment;filename=$fileName.xlsx"); $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save('php://output'); exit; }
这样处理,在数据表比较小的时候还没什么,但是大量的字段的时候简直是想杀人了,所以分析下传给exportExcel据$list,大家可以发现,如果我们要把这个$list写活,那么必须得到像$list[0]= $v['name']的数据,前面的形如0一样的数字是好办的,那么获得后面的表的字段还有值就是一个问题了,下面可以看看我的做法,还是感觉太复杂了,希望有大家有更好的方法可以指导一下.
function export(){ //因为exportExcel这个方法要处理的数据是 $list1[数字]= 值 然后将$list1放入到$list //exportExcel要处理的数据就是$list $list = array(); $list1 = array(); $Model = M('CompanyTaxation');//获得要导出的表的模型对象 $map['status'] = 1; $land = $Model->where($map)->select();//表中状态为1的数据才导出来 $j= 0; foreach($land as $k => $v ){//获得 $list1[$j] = $v; $j++; } array_push($list, $list1); foreach($list as $k=>$v){} $data= array(); $x=1; //作为NO的计数 foreach($v as $k1=>$v1){ $y=0; foreach( $v1 as $k2 =>$v2){//对数据进行处理 得到例如 $v[1] = 企业名称 一条完整的数据 if($k2=="tax_month"){ $v1[$y] = date("Y-m",$v1[$k2]); }elseif($k2=="cid"){ $v1[$y] = get_name_by_id($v1[$k2],"Company");//可以根据id去获得名称 }elseif($k2=="bid"){//在所开发的模块Common下function.php写实现函数就行 $v1[$y] = get_name_by_id($v1[$k2],"Building"); }elseif($k2=="id"){ $v1[$y] = $x; }else{ $v1[$y] = $v2; } $y++; unset($v1[$k2]);//去掉原先 $v['name'] 类型的数据 } array_push($data, $v1);//将一条完整的数据加载到$data中,之后将$data传给exportExcel进行处理 $x++; } $headArr = array('NO','企业名称',"所属楼宇",'月营收','国税','地税',"交税月份"); $fileName1 = "Land"; $xlsTitle = '楼宇企业税务信息'.date('_YmdHis');//文件名称可根据自己情况设定 $this->exportExcel($fileName1,$headArr,$data,$xlsTitle); }
使用下面这种方式就可以实现,一处实现,多处复制的功效了,会方便很多只要改掉表头和一些需要处理的数据就ok.
可以这里去下载PHPEXcel
0 0
- OneThink+PHPExcel灵活适应导出数据Excel表(导出)
- OneThink+PHPExcel灵活适应导入数据Excel表(导入)
- thinkphp/onethink 用excel导出数据例子
- phpexcel导出数据到excel
- PHPExcel导出数据到excel
- 使用PHPExcel导出Excel表
- 使用phpExcel类新数据库中数据导出excel表
- phpexcel 导出数据库中数据到excel表中
- 利用PHPExcel导出数据到excel
- phpexcel导出数据库数据生成excel文件
- 利用PHPExcel导出数据到excel
- phpexcel导出excel文件
- PHPExcel导出excel
- PHPexcel导出excel文件
- PHPexcel 导出excel
- PHPExcel导出excel
- PHPExcel导入导出excel
- phpExcel导出excel
- java注解
- latex 定理环境,引理,定义,自定义 proof 环境
- (四)顺序串和链串
- 初步了解-集合框架
- 本人的oi之路————————序
- OneThink+PHPExcel灵活适应导出数据Excel表(导出)
- Nginx日志文件的配置
- 初步了解-泛型
- 简单却又复杂的FizzBuzz面试编程问题
- 【CodeForces 282B】Painting Eggs(模拟)
- Activiti工作流之初识BPMN
- 通过java调用SVN API 实现代码的checkout update commit
- JavaScript 练习题
- BZOJ-2038 小Z的袜子(hose) (莫队算法)