最近在做Excel檔案匯入資料到資料庫。網站如果想支援批量插入資料,可以製作一個上傳Excel檔案,匯入裡面的資料內容到MySQL資料庫的小程式。本文主要和大家分享Excel檔案匯入資料到MySQL資料庫的方法執行個體,希望能協助到大家。
要用到的工具:
ThinkPHP:輕量級國產PHP開發架構。可在ThinkPHP官網下載。
PHPExcel:Office Excel 文檔的一個PHP類庫,它基於微軟的OpenXML標準和PHP語言。可在CodePlex官網下載。、
1.設計MySQL資料庫product
建立product資料庫
|
CREATE DATABASE product DEFAULTCHARACTER SET utf8 COLLATE utf8_general_ci; |
建立pro_info表,表結構
|
CREATE TABLE pro_info(pId int(4)NOT NULL PRIMARY KEY AUTO_INCREMENT,pName varchar(20)NOT NULL,pPrice floatNOT NULL,pCount floatNOT NULL); |
2.產生項目
先在ThinkPHP同級目錄下建立index.php檔案,產生項目Home.
|
<?php define('APP_NAME','Home'); //項目名稱define('APP_PATH','./Home/'); //項目路徑define('APP_DEBUG', true); //開啟DEBUGrequire './ThinkPHP/ThinkPHP.php'; //引入ThinkPHP核心運行檔案?> |
3.上傳檔案表單
在Home/Tpl檔案夾下建立Index檔案夾,裡面建立index.html檔案
|
<!DOCTYPE html> <html> <head> <title>上傳檔案</title> <metacharset="UTF-8"> </head> <body> <formid="upload"action="__URL__/upload/"method="post"enctype="multipart/form-data"> <labelfor="file">上傳檔案:</label> <inputtype="file"name="file"id="file"><br/> <inputtype="submit"name="submit"value="上傳"/> </form> </body></html> |
4.在/Home/Lib/Action/IndexAction.class.php中編寫顯示上傳表單頁面、上傳Excel檔案、匯入Excel檔案方法(如果ThinkPHP/Extend下沒有擴充包,需要在ThinkPHP官網下載,然後將擴充包解壓放入)
|
<?php /**** 匯入Excel檔案資料到MySQL資料庫*/class IndexAction extends Action { /** * 顯示上傳表單html頁面 */ publicfunction index() { $this->display(); } /** * 上傳Excel檔案 */ publicfunction upload() { //引入ThinkPHP上傳檔案類 import('ORG.Net.UploadFile'); //執行個體化上傳類 $upload= new UploadFile(); //設定附件上傳檔案大小200Kib $upload->mixSize = 2000000; //設定附件上傳類型 $upload->allowExts =array('xls','xlsx', 'csv'); //設定附件上傳目錄在/Home/temp下 $upload->savePath ='./Home/temp/'; //保持上傳檔案名稱不變 $upload->saveRule =''; //存在同名檔案是否是覆蓋 $upload->uploadReplace = true; if(!$upload->upload()) { //如果上傳失敗,提示錯誤資訊 $this->error($upload->getErrorMsg()); }else { //上傳成功 //擷取上傳檔案資訊 $info= $upload->getUploadFileInfo(); //擷取上傳儲存檔案名稱 $fileName= $info[0]['savename']; //重新導向,把$fileName檔案名稱傳給importExcel()方法 $this->redirect('Index/importExcel',array('fileName'=> $fileName), 1,'上傳成功!'); } } /** * * 匯入Excel檔案 */ publicfunction importExcel() { header("content-type:text/html;charset=utf-8"); //引入PHPExcel類 vendor('PHPExcel'); vendor('PHPExcel.IOFactory'); vendor('PHPExcel.Reader.Excel5'); //redirect傳來的檔案名稱 $fileName= $_GET['fileName']; //檔案路徑 $filePath= './Home/temp/' . $fileName . '.xlsx'; //執行個體化PHPExcel類 $PHPExcel= new PHPExcel(); //預設用excel2007讀取excel,若格式不對,則用之前的版本進行讀取 $PHPReader= new PHPExcel_Reader_Excel2007(); if(!$PHPReader->canRead($filePath)) { $PHPReader= new PHPExcel_Reader_Excel5(); if(!$PHPReader->canRead($filePath)) { echo'no Excel'; return; } } //讀取Excel檔案 $PHPExcel= $PHPReader->load($filePath); //讀取excel檔案中的第一個工作表 $sheet= $PHPExcel->getSheet(0); //取得最大的列號 $allColumn= $sheet->getHighestColumn(); //取得最大的行號 $allRow= $sheet->getHighestRow(); //從第二行開始插入,第一行是列名 for($currentRow = 2; $currentRow <= $allRow; $currentRow++) { //擷取B列的值 $name= $PHPExcel->getActiveSheet()->getCell("B". $currentRow)->getValue(); //擷取C列的值 $price= $PHPExcel->getActiveSheet()->getCell("C". $currentRow)->getValue(); //擷取D列的值 $count= $PHPExcel->getActiveSheet()->getCell("D". $currentRow)->getValue(); $m= M('Info'); $num= $m->add(array('pName'=> $name,'pPrice' => $price, 'pCount'=> $count)); } if($num > 0) { echo"添加成功!"; }else { echo"添加失敗!"; } } }?> |
5.測試