转自:https://www.cnblogs.com/shenlin/p/7826664.html
准备工作:
1、tp环境(本人使用的是tp3.2)。
2、phpexecl扩展包,下载地址:点击下载,下载地址(class.php):
| 1 |
|
官方地址:点击下载(github下载地址) 。
3、下载扩展包,解压后,放在ThinkPHPLibraryOrgUtil目录下,最终目录结构为:ThinkPHPLibraryOrgUtilPHPExcel,将下载的包解压后.放在Util下。
写代码:
1、导出代码
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
|
导出结果截图

2、导入代码

//批量导入数据
public function batch_in(){
//上传文件-获取文件信息
$info = $this->execl_upload();//获取文件路径
$File_Name = $info['batch']['savepath'].$info['batch']['savename'];//存放位置
$exts = $info['batch']['ext'];//获取文件后缀
//引入第三方类
import("Org.Util.PHPExcel");
$PHPExcel = new PHPExcel();
if($exts == 'xls'){
import("Org.Util.PHPExcel.Reader.Excel5");
$PHPReader=new PHPExcel_Reader_Excel5();
}else if($exts == 'xlsx'){
import("Org.Util.PHPExcel.Reader.Excel2007");
$PHPReader=new PHPExcel_Reader_Excel2007();
}else if($exts == 'csv'){
import("Org.Util.PHPExcel.Reader.CSV");
$PHPReader=new PHPExcel_Reader_CSV();
}
//载入文件
$PHPExcel = $PHPReader->load($File_Name,$encode="utf-8");
//获取表中的第一个工作表,如果要获取第二个,把0改为1,依次类推
$currentSheet=$PHPExcel->getSheet(0);
//获取总列数
$allColumn=$currentSheet->getHighestColumn();
//获取总行数
$allRow=$currentSheet->getHighestRow();
//循环获取表中的数据,$currentRow表示当前行,从哪行开始读取数据,索引值从0开始
for($currentRow=2;$currentRow<=$allRow;$currentRow++){
//从哪列开始,A表示第一列
for($currentColumn='A';$currentColumn<=$allColumn;$currentColumn++){
//数据坐标
$address=$currentColumn.$currentRow;
//读取到的数据,保存到数组$arr中
$data[$currentRow][$currentColumn]=$currentSheet->getCell($address)->getValue();
}
}
$number_true = 0;
$number_error=0;
//遍历成数据库字段,便于执行
foreach ($data as $key => $value) {
//$data_info[$key]['id'] = $data[$key]['A'];
$data_info[$key]['inputtime'] =$data_info[$key]['signtime'] = $data[$key]['B'];
$data_info[$key]['updatetime'] = $data[$key]['C'];
$data_info[$key]['display'] = $data[$key]['D'];
$data_info[$key]['name'] = $data[$key]['E'];
$data_info[$key]['signip'] = $data[$key]['F'];
$data_info[$key]['signcity'] = $data[$key]['G'];
//如果出现空的情况,就删除
if($data_info[$key]['name'] == null){
unset($data_info[$key]);
}
//连接数据库,导入数据
$ResultInfo = D('Record')->create($data_info[$key]);
if($ResultInfo){
if( D('Record')->add($data_info[$key])){
$number_true++;
}else{
$number_error++;
}
}
}
if($number_true >1){
$this->success('导入成功',U('Result/result'));
}else{
$this->error("导入失败");
}
}

导入结果截图

3、文件上传代码

//execl上传
function execl_upload(){
$uplode= new ThinkUpload();//造实例化对象:造一个上传文件的类
$uplode->maxSize="31457280";//上传文件的大小
$uplode->exts=array('xls','xlsx','csv');//设置图片格式
$uplode->autoSub=true;//自动使用子目录保存上传文件 默认为true
$uplode->subName=array('date','Ymd');//文件命名方式已时期时间戳命名
$uplode->rootPath="./";//表示在public文件夹下
$uplode->savePath="Public/Uploads/Execl/";//设置附件上传目录:表示在public文件夹下自动建一个Uploads文件夹
// 上传文件
$info = $uplode->upload();
if(!$info)
{
// 上传错误提示错误信息
$this->error($uplode->getError());
}else{
// 上传成功 获取上传文件信息
return $info;
}
}
最后
以上就是矮小哑铃最近收集整理的关于Thinkphp利用execl实现批量导入和导出的全部内容,更多相关Thinkphp利用execl实现批量导入和导出内容请搜索靠谱客的其他文章。
发表评论 取消回复