PHP上傳Excel文件導(dǎo)入數(shù)據(jù)到MySQL數(shù)據(jù)庫(kù)示例
最近在做Excel文件導(dǎo)入數(shù)據(jù)到數(shù)據(jù)庫(kù)。網(wǎng)站如果想支持批量插入數(shù)據(jù),可以制作一個(gè)上傳Excel文件,導(dǎo)入里面的數(shù)據(jù)內(nèi)容到MySQL數(shù)據(jù)庫(kù)的小程序。
要用到的工具:
ThinkPHP:輕量級(jí)國(guó)產(chǎn)PHP開發(fā)框架??稍赥hinkPHP官網(wǎng)下載。
PHPExcel:Office Excel 文檔的一個(gè)PHP類庫(kù),它基于微軟的OpenXML標(biāo)準(zhǔn)和PHP語(yǔ)言??稍贑odePlex官網(wǎng)下載。、
1.設(shè)計(jì)MySQL數(shù)據(jù)庫(kù)product
創(chuàng)建product數(shù)據(jù)庫(kù)
CREATE DATABASE product DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
創(chuàng)建pro_info表,表結(jié)構(gòu)
CREATE TABLE pro_info( pId int(4) NOT NULL PRIMARY KEY AUTO_INCREMENT, pName varchar(20) NOT NULL, pPrice float NOT NULL, pCount float NOT NULL );
2.生成項(xiàng)目
先在ThinkPHP同級(jí)目錄下新建index.php文件,生成項(xiàng)目Home.
<?php define('APP_NAME', 'Home'); //項(xiàng)目名稱 define('APP_PATH', './Home/'); //項(xiàng)目路徑 define('APP_DEBUG', true); //開啟DEBUG require './ThinkPHP/ThinkPHP.php'; //引入ThinkPHP核心運(yùn)行文件 ?>
3.上傳文件表單
在Home/Tpl文件夾下新建Index文件夾,里面新建index.html文件
<!DOCTYPE html> <html> <head> <title>上傳文件</title> <meta charset="UTF-8"> </head> <body> <form id="upload" action="__URL__/upload/" method="post" enctype="multipart/form-data"> <label for="file">上傳文件:</label> <input type="file" name="file" id="file"><br /> <input type="submit" name="submit" value="上傳" /> </form> </body> </html>
4.在/Home/Lib/Action/IndexAction.class.php中編寫顯示上傳表單頁(yè)面、上傳Excel文件、導(dǎo)入Excel文件方法(如果ThinkPHP/Extend下沒有擴(kuò)展包,需要在ThinkPHP官網(wǎng)下載,然后將擴(kuò)展包解壓放入)
<?php /** * * 導(dǎo)入Excel文件數(shù)據(jù)到MySQL數(shù)據(jù)庫(kù) */ class IndexAction extends Action { /** * 顯示上傳表單html頁(yè)面 */ public function index() { $this->display(); } /** * 上傳Excel文件 */ public function upload() { //引入ThinkPHP上傳文件類 import('ORG.Net.UploadFile'); //實(shí)例化上傳類 $upload = new UploadFile(); //設(shè)置附件上傳文件大小200Kib $upload->mixSize = 2000000; //設(shè)置附件上傳類型 $upload->allowExts = array('xls', 'xlsx', 'csv'); //設(shè)置附件上傳目錄在/Home/temp下 $upload->savePath = './Home/temp/'; //保持上傳文件名不變 $upload->saveRule = ''; //存在同名文件是否是覆蓋 $upload->uploadReplace = true; if (!$upload->upload()) { //如果上傳失敗,提示錯(cuò)誤信息 $this->error($upload->getErrorMsg()); } else { //上傳成功 //獲取上傳文件信息 $info = $upload->getUploadFileInfo(); //獲取上傳保存文件名 $fileName = $info[0]['savename']; //重定向,把$fileName文件名傳給importExcel()方法 $this->redirect('Index/importExcel', array('fileName' => $fileName), 1, '上傳成功!'); } } /** * * 導(dǎo)入Excel文件 */ public function 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'; //實(shí)例化PHPExcel類 $PHPExcel = new PHPExcel(); //默認(rèn)用excel2007讀取excel,若格式不對(duì),則用之前的版本進(jìn)行讀取 $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文件中的第一個(gè)工作表 $sheet = $PHPExcel->getSheet(0); //取得最大的列號(hào) $allColumn = $sheet->getHighestColumn(); //取得最大的行號(hào) $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.測(cè)試
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- 教你使用java將excel數(shù)據(jù)導(dǎo)入MySQL
- 如何將Excel文件導(dǎo)入MySQL數(shù)據(jù)庫(kù)
- Springboot上傳excel并將表格數(shù)據(jù)導(dǎo)入或更新mySql數(shù)據(jù)庫(kù)的過程
- php通過PHPExcel導(dǎo)入Excel表格到MySQL數(shù)據(jù)庫(kù)的簡(jiǎn)單實(shí)例
- 使用phpexcel類實(shí)現(xiàn)excel導(dǎo)入mysql數(shù)據(jù)庫(kù)功能(實(shí)例代碼)
- php導(dǎo)入excel文件到mysql數(shù)據(jù)庫(kù)的方法
- phpMyAdmin下將Excel中的數(shù)據(jù)導(dǎo)入MySql的圖文方法
- Excel數(shù)據(jù)導(dǎo)入Mysql數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼
- MySQL批量導(dǎo)入Excel數(shù)據(jù)(超詳細(xì))
相關(guān)文章
Symfony數(shù)據(jù)校驗(yàn)方法實(shí)例分析
這篇文章主要介紹了Symfony數(shù)據(jù)校驗(yàn)方法,實(shí)例分析了Symfony數(shù)據(jù)校驗(yàn)的常見技巧與注意事項(xiàng),具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-01-01PHP的switch判斷語(yǔ)句的“高級(jí)”用法詳解
這篇文章主要介紹了PHP的switch判斷語(yǔ)句的“高級(jí)”用法詳解,其實(shí)本文講解的還是它的基礎(chǔ)用法,需要的朋友可以參考下2014-10-10Codeigniter實(shí)現(xiàn)智能裁剪圖片的方法
這篇文章主要介紹了Codeigniter實(shí)現(xiàn)智能裁剪圖片的方法,可以做到裁剪后不失真,盡可能保留圖片主題含義。需要的朋友可以參考下2014-06-063個(gè)PHP多維數(shù)組轉(zhuǎn)為一維數(shù)組的方法實(shí)例
這篇文章主要介紹了3個(gè)PHP多維數(shù)組轉(zhuǎn)為一維數(shù)組的方法實(shí)例,分別使用foreach、for、while三種循環(huán)方法來實(shí)現(xiàn),需要的朋友可以參考下2014-03-03Laravel框架實(shí)現(xiàn)的rbac權(quán)限管理操作示例
這篇文章主要介紹了Laravel框架實(shí)現(xiàn)的rbac權(quán)限管理操作,結(jié)合實(shí)例形式分析了Laravel框架權(quán)限控制rbac相關(guān)數(shù)據(jù)庫(kù)創(chuàng)建、讀寫及權(quán)限判斷等操作技巧,需要的朋友可以參考下2019-01-01yii2.0數(shù)據(jù)庫(kù)遷移教程【多個(gè)數(shù)據(jù)庫(kù)同時(shí)同步數(shù)據(jù)】
這篇文章主要介紹了yii2.0數(shù)據(jù)庫(kù)遷移的方法,可實(shí)現(xiàn)多個(gè)數(shù)據(jù)庫(kù)同時(shí)同步數(shù)據(jù)的功能,較為詳細(xì)的分析了Yii2針對(duì)遷移的創(chuàng)建、提交、重做及自定義遷移的相關(guān)概念與使用方法,需要的朋友可以參考下2016-10-10