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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM