thinkcmf,thinkphp,表格导入(PHPexcel)的实现,新手向(3.2)

对于新手来说,可以把表格中的数据导入进数据库那是十分好玩的一件事,我自己实现了一下网上的写法,基于PHPexcel实现的表格导入,踩了2个小时的坑,最终实例!

因为在thinkcmf中自己添加了phpexcel所以可以直接拿过来用,如果没有则可以自己添加,直接百度phpexcel就可以了,就是下面的文件夹和文件

对于thinkcmf来说它建有自己单独的model类我们可以把下面的代码放到单独的model类里面可以重复使用,下面上代码

--------------------------------------------------我 是 分 割 线--------------------------------------------------------------------------------

1.新建可以处理phpexcel的model类ExcelModel.class.php

 1 <?php
 2   namespace Think\Model;//自己新建一个model类
 3   use Think\Model;
 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)."\t"; 
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懒得下载的可以来我的百度云,链接如下

http://pan.baidu.com/s/1gfoRWsV

posted @ 2017-02-27 14:07  vajer  阅读(4086)  评论(0编辑  收藏  举报