對於新手來說,可以把表格中的數據導入進數據庫那是十分好玩的一件事,我自己實現了一下網上的寫法,基於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懶得下載的可以來我的百度雲,鏈接如下