下载:

1.引入命名空间:

use Org\Net\Http;

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

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

3.控制器中的操作:

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;
}

导入

先将配置文件YiXian放到ThinkPHP/Library/Org中,将PHPExcel放到Vendor文件中

1.视图层

<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);
}
}

导出:

首先把PHPExcel放到Vendor文件夹中

在Application/Common下建立一个functions.php文件。

functions.php

<?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.控制器

//导出Excel
public 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);
}
												

ThinkPHP 下载、导入、导出功能的设计与实现的更多相关文章

  1. vue+element-ui的简洁导入导出功能

    1.前段后台管理系统中数据展示一般都是用表格,表格会涉及到导入和导出;原生js导出excel2.导入是利用element-ui的Upload 上传组件; <el-upload class=&qu ...

  2. vue + element-ui实现简洁的导入导出功能

    1.安装ElementUI模块 cnpm install element-ui -S 2.在main.js中引入 import ElementUI from 'element-ui' import ' ...

  3. SpringCloud微服务实战——搭建企业级开发框架(三十):整合EasyExcel实现数据表格导入导出功能

      批量上传数据导入.数据统计分析导出,已经基本是系统必不可缺的一项功能,这里从性能和易用性方面考虑,集成EasyExcel.EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项 ...

  4. Laravel Excel 实现 Excel-CSV 文件导入导出功能

    Laravel Excel 是一款基于 PHPExcel 开发的Laravel框架专用的 Excel/CSV 文件导入导出功能的扩展包,用起来的非常方便. 它的 Github 地址是:https:// ...

  5. oracle导入导出功能

    1.普通版:oracle导入导出功能:导出exp 用户名/密码@SID file=f:\xx.dmp owner=用户名 导入imp 用户名/密码@SID full=y file=f:\xx.dmp ...

  6. office在繁体系统下 导入导出 功能灰显的解决方法

    当在win7系统使用繁体中文版的office时,或系统是繁体版时,可能会导致office的导入导出功能无法使用 解决方法: 控制面板--区域和语言--格式--中文简体

  7. poi实现excel的导入导出功能

    Java使用poi实现excel的导入导出功能: 工具类ExcelUtil,用于解析和初始化excel的数据:代码如下 package com.raycloud.kmmp.item.service.u ...

  8. 关于玩QQ消息导入导出功能的感想!

    今天玩了一下QQ的导入导出聊天记录的功能,感觉自己有些白痴,因为作为一个软件开发人员对自己平时使用的软件的功能掌握的不够,别说其他的任何东西了就连功能性的操作有些也不知道更别说熟练或精通了,这不是一个 ...

  9. 实现excel导入导出功能,excel导入数据到页面中,页面数据导出生成excel文件

    今天接到项目中的一个功能,要实现excel的导入,导出功能.这个看起来思路比较清楚,但是做起了就遇到了不少问题. 不过核心的问题,大家也不会遇到了.每个项目前台页面,以及数据填充方式都不一样,不过大多 ...

  10. Spring MVC 实现Excel的导入导出功能(2:Excel的导入优化和Excel的导出)

    Excel的导入V2优化版 有些时候文件上传这一步骤由前端来处理,只将上传后的 URL 传输给后端(可以参考上一文中的图片上传功能),也就是导入请求中并不会直接处理 MultipartFile 对象, ...

随机推荐

  1. lambda表达式不使用委托(delegate) 用FUNC

    lLambda不使用delegate关键字,而使用  Lambda运算符 => goes to l    1.Func<int,string> getInput = (int age ...

  2. Cleaner, more elegant, and harder to recognize (msdn blog)

    It appears that some people interpreted the title of one of my rants from many months ago, "Cle ...

  3. 优化设计提高sql类数据库的性能

    前言 在一个项目中,技术的统一性是最重要的,数据库的设计则是重点中的重点.NoSQL 是目前最流行的数据库,但是其实用性和功能性远不如sql数据库. 实际很多SQL数据库被诟病的性能问题大多是源于程序 ...

  4. css样式清零及常用类

    css样式清零及常用类 @charset "utf-8"; /*CSS Reset*/ /*"微软雅黑","\5FAE\8F6F\96C5\9ED1& ...

  5. display:inline-block引发的间隙思考

    一.导火线 没错,总有一类属性在助你轻松寻得捷径的同时,也可为你增添烦劳,比如本文的主谋display:inline-block.众前端们所诸知,其作用是将对象呈递为内联对象,但是对象的内容作为块对象 ...

  6. java基础之关键字static

        在java当中有很多关键字,static便是其中一个,它很普通但我们经常需要运用到它,所以要了解static是非常有必要的.   鉴于本人知识结构有限,若有错误忘不吝赐教,甚为感谢.   一. ...

  7. amaze UI 笔记 - JS

    导航添加依据 http://amazeui.org/javascript 下面内容属学习笔记,如有理解偏差和错误请留言相告,感谢!* =(官网这块写的很详细) 一 .UI增强 1.警告框 显示可关闭的 ...

  8. 【练习】Html

    要求: 用html相关知识实现以下网页 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  9. jQuery 入门

    不能正常引用jQuery-2.2.4.min.js所以代码没生效 jQuery 是一个 JavaScript 函数库.jQuery 库包含以下特性: HTML 元素选取 HTML 元素操作 CSS 操 ...

  10. 一种基于http协议的敏感数据传输方案

    最近公司需要通过公网与其它平台完成接口对接,但是基于开发时间和其它因素的考虑,本次对接无法采用https协议实现.既然不能用https协议,那就退而求其次采用http协议吧! 那么问题来了!在对接的过 ...