对于新手来说,可以把表格中的数据导入进数据库那是十分好玩的一件事,我自己实现了一下网上的写法,基于PHPexcel实现的表格导入,踩了2个小时的坑,最终实例!
因为在thinkcmf中自己添加了phpexcel所以可以直接拿过来用,如果没有则可以自己添加,直接百度phpexcel就可以了,就是下面的文件夹和文件
对于thinkcmf来说它建有自己单独的model类我们可以把下面的代码放到单独的model类里面可以重复使用,下面上代码
--------------------------------------------------我 是 分 割 线--------------------------------------------------------------------------------
1.新建可以处理phpexcel的model类ExcelModel.class.php。
1 <?php 2 namespace ThinkModel;//自己新建一个model类 3 use ThinkModel; 4 class ExcelModel extends Model { 5 protected $tableName = 'products_log'; 6 7 public function __construct() { 8 9 /*导入phpExcel核心类 SPAPP_PATH为存放phpexcel路径的定义,在入口文件index.php定义*/ 10 require_once SPAPP_PATH.'Core/Library/Vendor/PHPExcel/PHPExcel.php'; 11 require_once SPAPP_PATH.'Core/Library/Vendor/PHPExcel/PHPExcel/Writer/Excel5.php'; // 用于其他低版本xls 12 require_once SPAPP_PATH.'Core/Library/Vendor/PHPExcel/PHPExcel/Writer/Excel2007.php'; // 用于 excel-2007 格式 13 } 14 15 16 //导入excel内容转换成数组,import方法要用到 17 public function import($filePath){ 18 $this->__construct(); 19 $PHPExcel = new PHPExcel();//实例化,一定要注意命名空间的问题加 20 21 /**默认用excel2007读取excel,若格式不对,则用之前的版本进行读取*/ 22 $PHPReader = new PHPExcel_Reader_Excel2007(); 23 if(!$PHPReader->canRead($filePath)){ 24 $PHPReader = new PHPExcel_Reader_Excel5(); 25 if(!$PHPReader->canRead($filePath)){ 26 echo 'no Excel'; 27 return; 28 } 29 } 30 31 $PHPExcel = $PHPReader->load($filePath); 32 $currentSheet = $PHPExcel->getSheet(0); //读取excel文件中的第一个工作表 33 $allColumn = $currentSheet->getHighestColumn(); //取得最大的列号 34 $allRow = $currentSheet->getHighestRow(); //取得一共有多少行 35 $erp_orders_id = array(); //声明数组 36 37 /**从第二行开始输出,因为excel表中第一行为列名*/ 38 for($currentRow = 2;$currentRow <= $allRow;$currentRow++){ 39 40 /**从第A列开始输出*/ 41 for($currentColumn= 'A';$currentColumn<= $allColumn; $currentColumn++){ 42 //这部分注释不要,取出的数据不便于我们处理 43 // $val = $currentSheet->getCellByColumnAndRow(ord($currentColumn) - 65,$currentRow)->getValue();/**ord()将字符转为十进制数*/ 44 // if($val!=''){ 45 // $erp_orders_id[] = $val; 46 // } 47 //数据坐标 48 $address = $currentColumn . $currentRow; 49 //读取到的数据,保存到数组$arr中 50 $data[$currentRow][$currentColumn] = $currentSheet->getCell($address)->getValue(); 51 /**如果输出汉字有乱码,则需将输出内容用iconv函数进行编码转换,如下将gb2312编码转为utf-8编码输出*/ 52 //echo iconv('utf-8','gb2312', $val)." "; 53 54 } 55 } 56 return $data; 57 }
2.新建html用于文件上传student_excel.html,直接上form表单了,一定要加enctype="multipart/form-data"。
1 <form method="post" class="form-horizontal js-ajax-form" action="{:U('Student/student_excelpost')}" enctype="multipart/form-data"> 2 <fieldset> 3 <div class="control-group"> 4 <label class="control-label">导入excel文件:</label> 5 <div class="controls"> 6 <input type="file" name="file_stu"> 7 <span class="form-required">*</span> 8 </div> 9 </div> 10 </fieldset> 11 <div class="form-actions"> 12 <button type="submit" class="btn btn-primary js-ajax-submit">导入</button> 13 </div> 14 </form>
3.上传过去php来判断表格,处理表格,返回结果
1 //表格数据 2 public function student_excelpost(){ 3 //获取上传的文件名、扩展名等信息 4 if (! empty ( $_FILES ['file_stu'] ['name'] )) 5 { 6 //保存的是文件上传到服务器临时文件夹之后的文件名 7 $tmp_file = $_FILES ['file_stu'] ['tmp_name']; 8 //分割文件名和扩展名 9 $file_types = explode ( ".", $_FILES ['file_stu'] ['name'] ); 10 //获取扩展名 11 $file_type = $file_types [count ( $file_types ) - 1]; 12 13 /*判别是不是.xls文件,判别是不是excel文件*/ 14 if (strtolower ( $file_type ) != "xlsx" && strtolower ( $file_type ) != "xls") 15 { 16 $this->error ( '不是Excel文件,重新上传' ); 17 } 18 19 /*设置上传路径*/ 20 $savePath = Excel_PATH.'Excel/'; 21 22 /*以时间来命名上传的文件*/ 23 $str = date ( 'Ymdhis' ); 24 $file_name = $str . "." . $file_type; 25 26 /*是否上传成功*/ 27 if (! copy ( $tmp_file, $savePath . $file_name )) 28 { 29 $this->error ( '上传失败' ); 30 } 31 } 32 $data = D("Think/Excel")->import( $savePath . $file_name ); 33 34 $res = array(); //声明数组 35 36 // echo'<pre>'; 37 // var_dump($data); 38 // exit; 39 //查询user表,对应信息相互关联 40 foreach($data as $i=>$val){ 41 // var_dump($val[B]); 42 $s['class_name'] = $val[A]; 43 $s['student_name'] = $val[B]; 44 $s['student_number'] = $val[C]; 45 $s['student_tel'] = $val[D]; 46 if($val[E] == '男'){ 47 $s['student_sex'] = 1; 48 }else{ 49 $s['student_sex'] = 0; 50 } 51 $s['student_birthday'] = $val[F]; 52 $s['student_national'] = $val[G]; 53 $s['student_native'] = $val[H]; 54 $s['student_email'] = $val[I]; 55 $s['student_from'] = $val[J]; 56 $s['student_alone'] = $val[K]; 57 $s['student_exp'] = $val[L]; 58 $s['student_think'] = $val[M]; 59 $s['student_love'] = $val[N]; 60 $s['student_tschool'] = $val[O]; 61 $s['student_tmajor'] = $val[P]; 62 $s['student_contact'] = $val[Q]; 63 $s['student_consider'] = $val[R]; 64 $s['student_affect'] = $val[S]; 65 $s['student_imp'] = $val[T]; 66 // echo'<pre>'; 67 // var_dump($s);$this->student_model(为数据库实例,本人在上面定义这里可以直接拿过来用) 68 $rs = $this->student_model->add($s); 69 } 70 if($rs){ 71 $this->success("数据添加成功!", U('Student/student')); 72 }else{ 73 $this->error("数据添加失败!"); 74 } 75 // exit; 76 } 77 78 }
以上便是phpexcel的运用实例,具体不难,实践一遍即可知晓,有什么不足的地方还请大家指教
本人邮箱1428937236@qq.com,欢迎骚扰,上面的phpexcel懒得下载的可以来我的百度云,链接如下