php如何導入xls文件,如何使用PHPEXCEL導入EXCEL文件

一.目的

先說為什么要寫這篇博客,我的目標是,將一個excel文件導入到一個ThinkPHP的項目的數據庫之中。這個看似簡單的目標卻讓我搞了兩天兩夜,原因主要有兩點,一個是自己沒有php的基礎,也不了解ThinkPHP這個框架,所以什么都是從零開始,許多可能基礎好的人可能一弄就好的東西我都需要百度很久。這篇博客針對於零基礎的同學,所以有的地方可能稍顯啰嗦,大神多多見諒!

二.介紹情況

1.我的數據表結構是這樣的

010782c1ececd930bb1cb4946f930a16.png

(。。。有沒有同學不知道怎么看數據庫的,反正我一開始連這個都不知道…這個是右擊wampserver,就會看見一個PHPadmin,點就可以了)

2.要導入的EXCEL文件是這樣的

ac0d65700bb147469bf54d1a9076ba83.png

三.事先准備

1.下載PHPExcel,這是待會兒我們處理EXCEL文件的第三方類庫,並且將下載好的文件復制到這個路徑下面wamp\www\ThinkPHP\Library\Vendor

里面是這樣子的

327967514416e00a9b5e6a746ef5056c.png

四.編寫代碼(我的注釋寫的比較詳細,就沒有在外面單獨說代碼了)

1.根據MVC模式,我們也來分別弄一個控制器(ExcelController.class.php),視圖(excel.html)和模型(UsersModel)。

這里補充一些ThinkPHP的基礎知識

*a.一般控制器的名字要和對應視圖名字一樣(去掉個Controller),控制器文件的后綴一定是.class.php。

b.模型的名字和對應數據表的名字是一樣的,當然要弄個前綴后綴什么的,比如,我的模型名字是UsersModel,那么它操縱的數據表就是think_users.*

2.控制器代碼<?php

namespace Home\Controller;

use Think\Controller;

Vendor('Excel.Classes.PHPExcel');/*引入PHPExcel類。我就是在這一步卡了超級久,總是報錯找不到這個類,

氣死人,網上面提示說用什么Import,require什么的,都不好使,就這個好使,當

然,別的方法到底行不行,我現在能力有限,搞不清楚.*/

class ExcelController extends CommonController {

//這個方法就是顯示出對應的html頁面,因為這個叫excelcontroller,所以它就會顯示excel.html。

public function excel()

{

$this->display();

}

/* 這個函數就是最重要的函數啦,用來讀取EXCEL文件,然后將它添加到數據庫中,下面會有詳細的解釋*/

public function add()

{/*下面三行是取得由頁面傳過來的excel文件,然后經過一些字符串處理,取得了文件名,用於判斷是不是excel文件*/

$tmp_file = $_FILES ['file_stu'] ['tmp_name'];

$file_types = explode ( ".", $_FILES ['file_stu'] ['name'] );

$file_type = $file_types [count ( $file_types ) - 1];

/*判別是不是.xls文件,判別是不是excel文件*/

if (strtolower ( $file_type ) != "xlsx" && strtolower ( $file_type ) != "xls")

{

$this->error ( '不是Excel文件,重新上傳' );

}

/*設置上傳路徑,就是上傳的excel文件保存的地方,注意路徑的分割是用的正斜杠不是反斜杠*/

$savePath = 'E:/php/wamp/www/Public/';

/*以時間來命名上傳的文件*/

$str = date ( 'Ymdhis' );

$file_name = $str . "." . $file_type;

/

/*是否上傳成功*/

if (!move_uploaded_file ( $_FILES ['file_stu'] ['tmp_name'], $savePath.$file_name ))

{

$this->error ( '上傳失敗' );

}

//特別注意這里PHPExel前面有一個反斜杠,\

//load里面是對應的excel文件,通過這個文件來生成PHPExcel

$objPHPExcel=\PHPExcel_IOFactory::load("E:/php/wamp/www/Public/".$file_name);

//獲取sheet0,就是excel第一個sheet

$sheet = $objPHPExcel->getSheet(0);

$highestRow = $sheet->getHighestRow(); // 取得總行數

$highestColumn = $sheet->getHighestColumn(); // 取得總列數

//調用ThinkPHP中的M方法來實例化一個USERS模型,從而調用SQL操作

$User = M("Users");

//這個循環是一行一行的把excel里面的值取出來,存到$data數組里面

for($j=2;$j<=$highestRow;$j++)

{

$data['id']= $objPHPExcel->getActiveSheet()->getCell("A".$j)->getValue();//獲取A列的值

$data['userid']= $objPHPExcel->getActiveSheet()->getCell("B".$j)->getValue();

$data['username']= $objPHPExcel->getActiveSheet()->getCell("C".$j)->getValue();

$data['password']= md5($objPHPExcel->getActiveSheet()->getCell("D".$j)->getValue());

$data['usertype']= $objPHPExcel->getActiveSheet()->getCell("E".$j)->getValue();

$data['status']= $objPHPExcel->getActiveSheet()->getCell("F".$j)->getValue();

//調用add操作,將數據存入數據庫

$User->add($data);

}

}

}

3.excel.html文件

導入Excel表:

4.UsersModel文件(這個不重要,隨便寫點都行)<?php

namespace Home\Model;

use Think\Model;

/**

*

*/

class UsersModel extends Model

{

protected $_validate = array(

array('userid', '', '用戶名(學號)不能為空!', 0, 'unique', 1), //默認情況下用正則進行驗證

array('username', 'require', '請輸入你的真實姓名', 1), // 在新增的時候驗證name字段是否唯一

array('usertype', 'require', '請輸入你的賬號類型'),

array('email', '', '該郵箱已被占用', 0, 'unique', 1), // 新增的時候email字段是否唯一

array('phone', '', '該手機號碼已被占用', 0, 'unique', 1), // 新增的時候mobile字段是否唯一

// 正則驗證密碼 [需包含字母數字以及@*#中的一種,長度為6-22位]

array('password', '/^([a-zA-Z0-9@*#]{32})$/', '密碼格式不正確,請重新輸入!', 0),

array('repassword', 'password', '確認密碼不正確', 0, 'confirm'), // 驗證確認密碼是否和密碼一致

array('email', 'email', '郵箱格式不正確'), // 內置正則驗證郵箱格式

array('phone', '/^1[34578]\d{9}$/', '手機號碼格式不正確', 0), // 正則表達式驗證手機號碼

}

好像就沒什么了,最后弄完之后就是這樣的

aaaa7720ba60307059dc6f379c58b199.png

第一次寫博客,寫的不好的地方,請多多見諒,歡迎大家在評論區和我交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值