PHP實例:使用PHPExcel導入Excel2003文檔和Excel2007文檔到MySQL數據庫中,
如果要使用phpExcelReader將Excel 數據導入到mysql 數據庫,請讀者點擊這個文章查看。
使用phpExcelReader將Excel 數據導入到mysql 數據庫。
下面我們介紹另一種方法來實現導入Excel到MySQL數據庫。
1、到官網http://phpexcel.codeplex.com/下載PHPExcel類庫,我目前使用的是1.7.9版本。如圖:
2、直接上代碼。
(1)、conn.php文件(這個不用介紹,你懂得):
PHP Code復制內容到剪貼板
- $mysql=mysql_connect("localhost","root","root");
- mysql_select_db("test",$mysql);
- mysql_query("set names GBK");
(2)、HTML頁面部分:index.php文件(表單提交頁面):
XML/HTML Code復制內容到剪貼板
- <form name="form2" method="post" enctype="multipart/form- data" action="upload_excel.php">
- <input type="hidden" name="leadExcel" value="true">
- <table align="center" width="90% " border="0">
- <tr>
- <td>
- <input type="file" name="inputExcel"><input type="submit" name="import" value="導入數據 ">
- </td>
- </tr>
- </table>
- </form>
(3)、表單處理處理程序部分:upload_excel.php文件:
PHP Code復制內容到剪貼板
- include("conn.php");
- include("function.php");
-
- if($_POST ['import']=="導入數據 "){
-
- $leadExcel=$_POST['leadExcel'];
-
- if($leadExcel == "true")
- {
- //echo "OK";die();
- //獲取上傳的文件名
- $filename = $HTTP_POST_FILES['inputExcel'] ['name'];
- //上傳到服務器上的臨時文件名
- $tmp_name = $_FILES ['inputExcel']['tmp_name'];
-
- $msg = uploadFile($filename,$tmp_name);
- echo $msg;
- }
- }
(4)、函數部分:function.php文件:
PHP Code復制內容到剪貼板
- //導入Excel文件
- function uploadFile($file,$filetempname)
- {
- //自己設置的上傳文件存放路徑
- $filePath = 'upFile/';
- $str = "";
- //下面的路徑按照你 PHPExcel的路徑來修改
- set_include_path('.'. PATH_SEPARATOR .'E:\php\AppServ\www\91ctcStudy\PHPExcelImportSQl2 \PHPExcel' . PATH_SEPARATOR .get_include_path());
-
- require_once 'PHPExcel.php';
- require_once 'PHPExcel\IOFactory.php';
- //require_once 'PHPExcel\Reader\Excel5.php';//excel 2003
- require_once 'PHPExcel\Reader\Excel2007.php';//excel 2007
-
- $filename=explode(".",$file);//把上傳的文件名以“.”好為准做一個數組。
- $time=date("y-m-d-H-i- s");//去當前上傳的時間
- $filename [0]=$time;//取文件名t替換
- $name=implode (".",$filename); //上傳後的文件名
- $uploadfile=$filePath.$name;//上傳後的文件名地址
-
-
- //move_uploaded_file() 函數 將上傳的文件移動到新位置。若成功,則返回 true,否則返回 false。
- $result=move_uploaded_file($filetempname,$uploadfile);//假如上傳到當前目錄下
- if($result) //如果上傳文件成功,就執行導入 excel操作
- {
- // $objReader = PHPExcel_IOFactory::createReader('Excel5');//use excel2003
- $objReader = PHPExcel_IOFactory::createReader('Excel2007');//use excel2003 和 2007 format
- // $objPHPExcel = $objReader->load($uploadfile); //這個容易造成httpd崩潰
- $objPHPExcel = PHPExcel_IOFactory::load($uploadfile);//改成這個寫法就好了
-
- $sheet = $objPHPExcel- >getSheet(0);
- $highestRow = $sheet- >getHighestRow(); // 取得總行數
- $highestColumn = $sheet- >getHighestColumn(); // 取得總列數
-
- //循環讀取excel文件,讀取一條,插入一條
- for($j=2;$j<=$highestRow;$j++)
- {
- for($k='A';$k<=$highestColumn;$k++)
- {
- $str .= iconv('utf-8','gbk',$objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue()).'\\';//讀 取單元格
- }
- //explode:函 數把字符串分割為數組。
- $strs =& nbsp;explode("\\",$str);
-
- //var_dump ($strs);
- //die();
- $sql =&n bsp;"INSERT INTO z_test_importexcel(duty_date,name_am,name_pm) VALUES ('".$strs[0]."','".$strs[1]."','".$strs[2]."')";
- //echo $ sql;
- mysql_query ("set names GBK");//這就是指定數據庫字 符集,一般放在連接數據庫後面就系了
- if(! mysql_query($sql)){
- & nbsp; return false;
- }
- $str =&n bsp;"";
- }
-
- unlink ($uploadfile); //刪除上傳的excel文件
- $msg = "導入成 功!";
- }else{
- $msg = "導入失 敗!";
- }
- return $msg;
- }
關於這個函數,參考了http://blog.csdn.net/grassroots20 11/article/details/8104604該博友的文章,但是,該博友的寫法,我認為有問題,至少 ,我用的
$objPHPExcel = $objReader->load ($uploadfile);
這一句寫法,在運行的時候,會出現:
或者是PHPExcel類庫官方後來升級了,調用方法需要改正一下吧,具體筆者就沒考究了。
3、通過上面的幾個步驟,讀者再分別准備一個xls和xlsx文檔就可以了,系統運行效果:
附件下載:完整DEMO下載(已含PHPExcel類庫)附件下載:完整DEMO下載(已含PHPExcel類庫)