下载:

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. bzoj 2753: [SCOI2012]滑雪与时间胶囊

    Description a180285非常喜欢滑雪.他来到一座雪山,这里分布着M条供滑行的轨道和N个轨道之间的交点(同时也是景点),而且每个景点都有一编号i(1<=i<=N)和一高度Hi. ...

  2. Cleaner, more elegant, and wrong(翻译)

    Cleaner,more elegant,and wrong 整洁,更优雅,但是错的 并不是因为你看不到错误的产生路径就意味着它不存在. 下面是C#编程书中的一个片段,摘自关于异常处理的章节. try ...

  3. composer安装laravel

    安装composer composer是一个很有用的工具,我将用它在本机(win7)上安装laravel 到composer的官网,根据自己的系统要求下载相应的版本 安装laravel 首先cmd下进 ...

  4. Python学习_01_对象

    之前关于python的知识比较零散,这一个系列的随笔将python重新学习整理一遍.学习书籍<Python核心编程>第二版. Python对象基础 python并不是一个单纯面向对象的语言 ...

  5. DBA 优化法则

    硬件资源是根本,DBA是为了充分利用硬件资源:(更新中--) 统一SQL语句: 减少SQL嵌套: 执行计划返回结果集(决定计划走向): 合理使用临时表: tempdb分多文件: OLTP 条件使用变量 ...

  6. swiper轮播问题之一:轮播图内容为动态数据生成时轮播图无法自动轮播

    本人在用H5做移动端项目中使用Swiper遇到的两个问题,因此加深了对Swiper的掌握,分享出来对刚开始接触Swiper的童鞋们或多或少会有帮助.        首先,new Swiper的初始化最 ...

  7. vexx 邀请码 送3个比特龙

    错过了比特币的行情,注册获取3个原始比特币分叉币,比特龙. 目前10元一个,送3个币.类似于股票IPO,第一天一般会冲高十几倍,建议第一天就卖. 如果看好就继续持有吧. 放心是送的不用钱的. 注册网址 ...

  8. Java第一章----Java概述+环境搭建

    写在前面的话: Java基础的东西看过好几遍,但是过一段都就忘记了,所以这次我决定花费一些时间整理一个系列博客供以后方便查阅.此系列根据Java编程思想+Java核心技术两本书整理而来,这两本书也是我 ...

  9. 第十章:Python の 网络编程基础(二)

    本課主題 Python中的作用域补充 socketserver 源码 线程的介绍和操作实战 进程的介绍和操作实战 协程的介绍和操作实战 本周作业 Python中的作用域补充 Python世界里沒有块级 ...

  10. Appium python

    1.运行报错:FAILED_ALREADY_EXISTS: Attempt to re-install io.appium.android.ime without first uninstalling ...