ThinkPHP3.1.3使用phpExcel1.8.0实现数据从Excel表格导入mysql数据库
2015-07-29 16:18
851 查看
首先,去PHPExcel官方网站下载PHPExcel,官方地址为;http://phpexcel.codeplex.com/.我下的是1.8.0版本的.解压后发现还是蛮大的,有十几M,不知道其他版本是不是会小点.
把解压好的PHPExcel文件放在ThinkPHP的Vender文件夹下(专门放第三方类库的),如下图
其次,创建Excel转换数组类,并把它放在ThinkPHP\Extend\Library\ORG\Util目录下
如右图
现在来说Excel,表格的结构样式和mysql样式要类似,表格样式如下(本人对Excel使用只是一般,所以如果有Excel大神做的报表,不知后果如何).
前端页面相关代码:
最后,控制器部分使用了Thinkphp自带的上传类,使用unlink()函数是为了删除上传的excel表格,以免文件夹存入过多文件,调试代码时可先注释掉.或者不写也行,把删除文件的工作交给你们的运维.代码中foreach循环部分$v[]里的0, 1,2可以改动以下看看与Excel表格里的内容是什么关系.可以把数组打印出来看一看,你就很清楚了
相关代码:
把解压好的PHPExcel文件放在ThinkPHP的Vender文件夹下(专门放第三方类库的),如下图
其次,创建Excel转换数组类,并把它放在ThinkPHP\Extend\Library\ORG\Util目录下
class ExcelToArrary { public function __construct() { Vendor("PHPExcel.Classes.PHPExcel");//引入phpexcel类(留意路径,不了解路径可以查看下手册) Vendor("PHPExcel.Classes.PHPExcel.IOFactory"); //引入phpexcel类(留意路径) } public function read($filename,$encode,$file_type){ if(strtolower ( $file_type )=='xls')//判断excel表类型为2003还是2007 { Vendor("PHPExcel.Classes.PHPExcel.Reader.Excel5"); //引入phpexcel类(留意路径) $objReader = PHPExcel_IOFactory::createReader('Excel5'); }elseif(strtolower ( $file_type )=='xlsx') { Vendor("PHPExcel.Classes.PHPExcel.Reader.Excel2007");//引入phpexcel类(留意路径) $objReader = PHPExcel_IOFactory::createReader('Excel2007'); } $objReader->setReadDataOnly(true); $objPHPExcel = $objReader->load($filename); $objWorksheet = $objPHPExcel->getActiveSheet(); $highestRow = $objWorksheet->getHighestRow(); $highestColumn = $objWorksheet->getHighestColumn(); $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); $excelData = array(); for ($row = 1; $row <= $highestRow; $row++) { for ($col = 0; $col < $highestColumnIndex; $col++) { $excelData[$row][] =(string)$objWorksheet->getCellByColumnAndRow($col, $row)->getValue(); } } return $excelData; } }
如右图
现在来说Excel,表格的结构样式和mysql样式要类似,表格样式如下(本人对Excel使用只是一般,所以如果有Excel大神做的报表,不知后果如何).
前端页面相关代码:
<div> <form method="post" action="{:U('Index/upload')}" enctype="multipart/form-data"> <font>导入Excel数据:</font> <label for="file_stu">上传</label> <input name="file_stu" type="file" id="file_stu" /> <h3>温馨提示:</h3> <p>请确认您的Excel表格类型是xls的,以免出现兼容问题.</p> <inputtypeinputtype="submit" class="sure" value="导入" /> </form> </div>
最后,控制器部分使用了Thinkphp自带的上传类,使用unlink()函数是为了删除上传的excel表格,以免文件夹存入过多文件,调试代码时可先注释掉.或者不写也行,把删除文件的工作交给你们的运维.代码中foreach循环部分$v[]里的0, 1,2可以改动以下看看与Excel表格里的内容是什么关系.可以把数组打印出来看一看,你就很清楚了
相关代码:
public function upload(){ import('ORG.Util.ExcelToArrary');//导入excelToArray类 if (! empty ( $_FILES ['file_stu'] ['name'] )){ import('ORG.Net.UploadFile'); $upload = new UploadFile();// 实例化上传类 $upload->maxSize = 3145728 ;// 设置附件上传大小 $upload->allowExts = array('xls', 'xlsx');// 设置附件上传类型 $upload->savePath = './Uploads/';// 设置附件上传目录 if(!$upload->upload()) {// 上传错误提示错误信息 $this->error($upload->getErrorMsg()); }else{// 上传成功 获取上传文件信息 $info = $upload->getUploadFileInfo(); } }else{ $this->error('(⊙o⊙)~没传数据就导入?!你在逗我?!'); } //dump($info);die; $ExcelToArrary=new ExcelToArrary();//实例化 $res=$ExcelToArrary->read($info[0]['savepath'].$info[0]['savename'],"UTF-8",$info[0]['extension']);//传参,判断office2007还是office2003 $res = array_slice($res,1); //为了去掉Excel里的表头,也就是$res数组里的$res[0]; //dump($res); foreach ( $res as $k => $v ){ //循环excel表 $data[$k]['mobile'] = $v [0];//创建二维数组 $data[$k]['name'] = $v [1]; $data[$k]['duty'] = $v [2]; } //dump($data);die; $result=M('appkey')->addAll($data); if(!$result){ $this->error('导入数据库失败'); exit(); }else{ $filename = './Uploads/'.$info[0]['savename'];//上传文件绝对路径,unlink()删除文件函数 if (unlink($filename)) { $this->success ( '导入成功' ); }else{ $this->error('缓存删除失败'); } } }
相关文章推荐
- php图形图像处理基础
- ajax 验证用户名是否存在
- PHP实现的简单缓存类
- php引用php文件
- Ubuntu下搭建tftp服务器最简单方法
- Ftp操作
- 1亿条数据在PHP中实现Mysql数据库分表100张
- PHP实现简单爬虫的方法
- php常用函数
- ftp文件及文件夹操作
- PHP mysql_ping()和mysqli_ping()的区别
- ftp文件下载
- mysql 连接php中文乱码
- mysql 连接php中文乱码
- mysql 连接php中文乱码
- PHP如何实现Unicode和Utf-8编码相互转换
- EditPlus自动补全、模板配置
- PHP正则表达式
- php读取excel中的时间转换问题
- php模拟post请求 测试api接口