下载:

1.引入命名空间:

use Org\Net\Http;

2.在入口文件中设置根目录:

//定义根目录的绝对地址
define('ROOT',str_replace("\\","/",dirname(__FILE__))); //定义根目录外的地址 define('UPLOAD_PATH',str_replace("\\","/",dirname(dirname(__FILE__))));

public function downloadss() {   

$work=D('Work');

//实例化自定义基础模型类

$id = I('get.id');

$file=$work->getWorkMsg($id);//根据ID获取文件字段名与下载的文件名称

//要下载的文件的完整路径

$fileurl = ROOT .'/'.'Public'.'/'. $file['文件字段名']; //ROOT.$file;

//把路径用点炸开,以便获取文件后缀名

$arr = explode('.', $file['文件字段名']);

//取得路径的最后尾缀,json_encode()中的第二个参数是为了解决中文转码的问题

$name = json_encode($file['name'] . '.' . $arr[count($arr) - 1], JSON_UNESCAPED_UNICODE);

$down = new Http(); //实例化下载类

$down->download($fileurl, $name);//下载的路径和名称

}

4.模型类中的方法:用户根据ID获取要下载的文件字段名和下载的文件名称(例如:图片字段:picurl  ,图片的名称:picurl_name)

public function getWorkMsg($id){    $where['w.stu_id']=$id;    $list=$this->alias('w') ->where($where) ->join('oa_student_info s on w.stu_id=s.id','left') ->field('w.offer,s.name') ->find(); return $list; }

导入

先将配置文件form method="post" action="<{:U('Home/StudentInfo/eximport')}>" enctype="multipart/form-data"> <input type="file" name="excel"/> <input type="submit" value="导入学员" class="dao dao1"/> </form>

2.控制器层

//导入excel
public function eximport(){//导入操作之前,首先要做上传操作 $upload = new Upload();//↑注意引入↑(use Think\Upload;) $upload->maxSize = 3145728 ; $upload->exts = array('xls', 'csv', 'xlsx'); $upload->rootPath = './Public'; $upload->savePath = '/excel/'; $info = $upload->upload(); if(!$info){ $this->error($upload->getError()); }else{//上传成功拼接获得上传文件的地址 $filename=ROOT.'/Public'.$info['excel']['savepath'].$info['excel']['savename']; /* * 引入导入操作所需的底层类文件 * 文件路径ThinkPHP/Library/Org/YiXian/ExcelReader.class.php */ import("Org.YiXian.ExcelReader"); //实例化导入类 $ExcelReader=new \ExcelReader(); //调用导入类中的reader_excel(文件路径)方法 $arr=$ExcelReader->reader_excel($filename); $gArr=M('UserInfo')->select();//查询出归属人的信息 $cArr=M('ClassInfo')->select();//查询出班级的信息 /* * 终级目标:组装成要插入数据库的数组$data[]; * $arr[$key]['1'] : Excel表格中第2列的数据 * $arr[$key]['2'] : Excel表格中第3列的数据(以下逐个递增) * * $data['name'] :自定义的数组并赋值(以下以此类推) * * add() :调用add()方法,向数据库表中添加数据 */ foreach ($arr as $key => $value) { $data['name']=$arr[$key]['1']; /* * 由于学生表里面的性别字段存取的是数字,所以要先判断一下“男或女”, * 然后向数据库添加对应数字(***此处我用的判断方法是三目运算,也可 * 以使用其他的判断方法***) * 以下学费是否交齐字段也是类似的处理方法 */ $data['sex']=($arr[$key]['2']=='男')?1:2;//三目运算将要导入的性别转换为数字 /* * 所在班级,数据处理 * 由于学生表里面的班级字段存取的是班级的ID,所以要先查询班级表的数据, * 然后做数组处理(下面的“归属人”,与此操作类似) */ foreach ($cArr as $kk=>$vv){ if ($vv['class_code'] == $arr[$key]['3']) $data['class_id'] = $vv['id']; } $data['has_pay']=($arr[$key]['4']=='已交齐')?1:2; /* * 由于Excel表中日期存储的是时间格式,存入数据库要转换为时间戳格式 * 所以此处调用的strtotime()方法 * 此后遇到日期格式,就用此方法转换 */ $data['birth_date']=strtotime($arr[$key]['5']); $data['age']=$arr[$key]['6']; /* * 由于学生表里面的学历字段存取的是数字,所以要先进行判断,然后把 * 对应的数字存储到数据库中(***此处我用的判断方法是switch,也可以使用 * 其他的判断方法***) */ switch ($arr[$key]['7']){ case '初中级以下':$data['edu']=1; break; case '高中':$data['edu']=2; break; case '中专':$data['edu']=3; break; case '大专':$data['edu']=4; break; case '本科':$data['edu']=5; break; case '硕士':$data['edu']=6; break; case '博士':$data['edu']=7; break; case '博士后':$data['edu']=8; break; } $data['school']=$arr[$key]['8']; $data['profession']=$arr[$key]['9']; $data['phone']=$arr[$key]['10']; //归属人 foreach ($gArr as $kk=>$vv){ if ($vv['name'] == $arr[$key]['11']) $data['userg_id'] = $vv['id']; } $data['create_time']=strtotime($arr[$key]['12']); $dataArr[]=$data; } $this->studentinfo->addAll($dataArr); //数据导入成功之后的跳转操作 $this->success('导入成功',U('StudentInfo/index_yx'),3); } }

导出:

首先把php /* * 这个函数放在公共函数function.php(应用目录/Common/Common)里面 * Excel表格导出调用的函数 */ function exportExcel($xlsName,$expCellName,$expTableData){ $fileName = $xlsName.date('_YmdHis');//or $xlsTitle 文件名称可根据自己情况设定 $cellNum = count($expCellName);//得到表头的长度 $dataNum = count($expTableData);//得到内容的长度 vendor("PHPExcel.PHPExcel");//引入EXCEL类包 $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.'学生表'); //输入标题 $objPHPExcel->setActiveSheetIndex(0)->getStyle ( 'A1' )->getAlignment ()->setHorizontal ( \PHPExcel_Style_Alignment::HORIZONTAL_CENTER ); // 设置单元格水平对齐格式 $objPHPExcel->setActiveSheetIndex(0)->getStyle ( 'A1' )->getAlignment ()->setVertical ( \PHPExcel_Style_Alignment::VERTICAL_CENTER ); // 设置单元格垂直对齐格式 //输出标题栏 for($i=0;$i<$cellNum;$i++){ $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].'2', $expCellName[$i][1]); } //输出内容栏 for($i=0;$i<$dataNum;$i++){ for($j=0;$j<$cellNum;$j++){ $objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j].($i+3), $expTableData[$i][$expCellName[$j][0]]); } } //导出 header('pragma:public'); header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$fileName.'.xls"'); header("Content-Disposition:attachment;filename=$fileName.xls"); $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); exit; }

1.视图层

<form action="<{:U('Home/StudentInfo/export')}>" method="post" class="dao_form"> <input type="hidden" name="sn" value="<{$sname}>" /> <input type="hidden" name="st" value="<{$tel}>" /> <button type="submit" target="_blank" class="dao">导出</button> </form>

2.控制器

//导出Excelpublic function export(){/* * 导出操作:从数据库中读取的数据,导出到Excel表格 * $map : 搜索条件 */ $map['del'] = 1; $map['status'] = 2; if (I('post.sn','') != '') $map['name'] = array('like','%'.I('post.sn','').'%'); if (I('post.st','') != '') $map['phone'] = array('eq',I('post.st','')); //设置编码为utf-8 header('content-type:text/html;charset=utf-8'); //导出的Excel表格的名字 $xlsName = "学生列表"; //导出的Excel表格的表头 $xlsCell = array( array('id','序号'), array('name','姓名'), array('sex','性别'), array('class_id','所在班级'), array('has_pay','学费状况'), array('birth_date','出生日期'), array('age','入学年龄'), array('edu','学历'), array('school','毕业院校'), array('profession','专业'), array('phone','联系电话'), array('userg_id','归属人'), array('create_time','创建时间'), ); //依据搜索条件,在数据库中搜索数据 $xlsData = $this->studentinfo->where($map)->select(); $gArr=M('UserInfo')->select();//查询归属人的信息 $cArr=M('ClassInfo')->select();//查询班级的信息 //向Excel表格中添加的数据 foreach ($xlsData as $k => $v) { /* * 由于学生表里面的性别字段存取的是数字,所以要先判断一下“男或女”, * 然后向Excel表格中添加对应简体汉字(***此处我用的判断方法是三目运算,也可 * 以使用其他的判断方法***) * 以下学费是否交齐字段也是类似的处理方法 */ $xlsData[$k]['sex']=($v['sex'] == 1)?'男':'女'; $xlsData[$k]['has_pay']=($v['has_pay'] == 1)?'已交齐':'未交齐'; /* * 由于学生表里面的学历字段存取的是数字,所以要先判断一下“学历”, * 然后向Excel表格中添加对应简体汉字(***此处我用的判断方法是switch,也可 * 以使用其他的判断方法***) */ switch ($v['edu']){ case 1:$xlsData[$k]['edu']='初中级以下'; break; case 2:$xlsData[$k]['edu']='高中'; break; case 3:$xlsData[$k]['edu']='中专'; break; case 4:$xlsData[$k]['edu']='大专'; break; case 5:$xlsData[$k]['edu']='本科'; break; case 6:$xlsData[$k]['edu']='硕士'; break; case 7:$xlsData[$k]['edu']='博士'; break; case 8:$xlsData[$k]['edu']='博士后'; break; } /* * ,数据处理 * 由于学生表里面的归属人字段存取的是员工的ID,所以要先查询员工表的数据, * 然后做数组处理(下面的“所在班级”,与此操作类似) */ foreach ($gArr as $kk=>$vv){ if ($vv['id'] == $v['userg_id']) $xlsData[$k]['userg_id'] = $vv['name']; } //所在班级 foreach ($cArr as $kk=>$vv){ if ($vv['id'] == $v['class_id']) $xlsData[$k]['class_id'] = $vv['class_code']; } /* * 由于数据库表中日期存储的是时间格式,存入Excel要转换为时间格式 * 所以此处调用的date()方法 * 此后遇到时间戳格式,就用此方法转换 */ $xlsData[$k]['birth_date']=date("Y-m-d",$v['birth_date']); $xlsData[$k]['create_time']=date("Y-m-d",$v['create_time']); } /* * 调用公共函数文件function.php中的exportExcel()函数 * exportExcel()函数是做导出操作的 * function.php文件所在位置:根/应用目录/Common/Common/ * $xlsName : Excel表格的名字 * $xlsCell : Excel表格的表头 * $xlsData : Excel表格的内容 */ exportExcel($xlsName,$xlsCell,$xlsData); }

转载于:https://www.cnblogs.com/xiantu/p/8337346.html

ThinkPHP3.2 下载、导入、导出功能的设计与实现相关推荐

  1. SpringBoot 项目实现 Excel 导入导出功能

    背景 Excel 导入与导出是项目中经常用到的功能,在 Java 中常用 poi 实现 Excel 的导入与导出.由于 poi 占用内存较大,在高并发下很容易发生 OOM 或者频繁 fullgc,阿里 ...

  2. SpringBoot 项目优雅实现 Excel 导入导出功能

    背景 Excel 导入与导出是项目中经常用到的功能,在 Java 中常用 poi 实现 Excel 的导入与导出.由于 poi 占用内存较大,在高并发下很容易发生 OOM 或者频繁 fullgc,阿里 ...

  3. MSE ZooKeeper 数据导入导出功能上线

    作者:草谷 背景 MSE 提供了托管版的 ZooKeeper,拥有比自建开源 ZooKeeper 稳定性更高的SLA,同时管控面提供了丰富的服务自治功能.赶在2022年的岁末,MSE ZooKeepe ...

  4. VUE的Excel导入导出功能

    在做人力资源管理的后台项目时,实现了excel表的导入导出功能.用到了vue-element-admin提供的框架(链接地址 ),我们只需要在自己的项目中封装改造即可. 项目中实现excel表的导入与 ...

  5. 文件上传下载导入导出

    ps: 代码已提交到gitee: https://gitee.com/Lazy_001/file-demo 文件上传下载导入导出 一.首先完成准备工作 1. 创建一个Springboot项目 < ...

  6. 十分钟看会laravel导入导出功能,就这么简单

    laravel5扩展包excel导入导出功能 一, 简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel,从而方便我们以优雅的.富有表现力的 ...

  7. 让模块支持“导入”“导出”功能

    让模块支持"导入""导出"功能 DNN模块可以支持导入导出功能,通过将模块内容导入到XML文件可以便于模块内容备份和转移,也可将模块内容事先以XML格式保存通过 ...

  8. easyexcel多个sheet导入_Java中Easypoi实现excel多sheet表导入导出功能

    Easypoi简化了开发中对文档的导入导出实现,并不像poi那样都要写大段工具类来搞定文档的读写. 第一步引入Easypoi依赖 cn.afterturn easypoi-spring-boot-st ...

  9. 安全组规则跨region导入导出功能介绍

    功能介绍 您可以在控制台clone一个安全组,进而快速创建安全组和添加安全组规则,但这个功能有个限制是无法跨region使用.为此ECS控制台开发了安全组规则导入导出功能,使用这个功能您可以把一个安全 ...

  10. SpringBoot中使用Easyexcel实现Excel导入导出功能(三)

    导出的数据包含有图片 导出excel表格的数据包含有图片,这种场景比较少.通Easyexcel实现这样的需求,我认为最简便的方法就是使用前面提到的自定义转换器(com.alibaba.excel.co ...

最新文章

  1. 2020年,语义分割可以在哪些方向进行研究并取得突破?
  2. DS实验题 Floyd最短路径 Prim最小生成树
  3. MySQL Index Condition Pushdown 原理与解析
  4. 使用Innobackupex快速搭建(修复)MySQL主从架构
  5. QCustomplot怎么实现对大数据量的自适应采样显示不卡顿
  6. Java中实用类:Date、Calendar、Math、Random、String、StringBuffer的用法
  7. NPM包管理器跟换国内镜像CNPM
  8. 让数据库操作变成非阻塞的
  9. ibatis_HelloWorld
  10. VMware mac虚拟机如何安装Windows系统
  11. Python_pip_03_安装模块出现错误时咋整
  12. 40-42-网络层ARP协议,ARP欺骗,网络执法官和arp防火墙
  13. linux的交换空间是什么意思,Linux交换空间是什么
  14. The Little Schemer读书笔记1
  15. 递归、迭代、分治、回溯、动态规划、贪心算法
  16. 【信息系统集成】-成本管理错题
  17. BIRT 使用说明书
  18. 中国互联网量级分化严重:小米将360踢出第二阵营
  19. 企业购置新车,各项费用会计入账以及案例分析
  20. python代码格式怎么写比较好

热门文章

  1. python智能光环板_学而思编程推出全新智能学习系统,搭配多种硬件
  2. 个人简历小程序前端源码
  3. 空调恶搞工具小程序版源码下载
  4. 最近很火的桌面小猫代打器 人性化UI设置界面
  5. linux mount挂载大小,Linux中mount挂载问题小结
  6. 酷炫好看的横向滑动个人介绍简历模板
  7. BringWindowToTop
  8. PHP 报错 Use of undefined constant prop_values - ass...
  9. liunx 命令手册 (chm)
  10. 深入理解Magento-第九章-修改、扩展、重写Magento代码