PHP使用PHPExcel讀取excel數(shù)據(jù)并批量上傳到數(shù)據(jù)庫(kù)
應(yīng)用場(chǎng)景
當(dāng)遇到需要批量導(dǎo)入數(shù)據(jù)的時(shí)候,前端會(huì)上傳一個(gè)excel表格,由后端讀取數(shù)據(jù)并存入數(shù)據(jù)庫(kù)。前端代碼就不介紹了,這是一個(gè)前后端分離的項(xiàng)目,主要是講解后端讀取excel表格的數(shù)據(jù)。前端上傳文件就可以了。
PHPExcel 是什么
是用來(lái)操作office excel 文檔的一個(gè)PHP類庫(kù),它基于微軟的OpenXML標(biāo)準(zhǔn)和PHP語(yǔ)言??梢允褂盟鼇?lái)讀取、寫(xiě)入不同格式的電子表格,如Excel(BIFF).xls,Excel 2007 (OfficeOpenXML),.xlsx,CSV,Libre/OpenOffice Calc .ods, Gnumeric, PDF, HTML等等。
要求
PHP 5.2.0 版本及以上
PHP extension php_zip 開(kāi)啟 (如果你需要使用 PHPExcel 來(lái)操作 .xlsx .ods or .gnumeric 文件)
PHP extension php_xml 開(kāi)啟
PHP extension php_gd2 開(kāi)啟(選填, 如果需要計(jì)算準(zhǔn)確的列寬需要開(kāi)啟此擴(kuò)展)
PHP 讀取文件寫(xiě)入數(shù)據(jù)庫(kù)
<?php header("Content-type:text/html; charset=utf-8"); // 制定允許其他域名訪問(wèn) header("Access-Control-Allow-Origin:*"); // 響應(yīng)類型 header('Access-Control-Allow-Methods:POST'); // 響應(yīng)頭設(shè)置 header('Access-Control-Allow-Headers:x-requested-with, content-type'); // 數(shù)據(jù)庫(kù)配置文件 include './config/config.php'; // 下載 PHPExcel 放入項(xiàng)目?jī)?nèi),引入即可 include "./PHPExcel-1.8/Classes/PHPExcel/IOFactory.php"; // 獲取前端傳入的文件 $file = $_FILES['file']; //臨時(shí)文件存放路徑 $fileTmp = $file['tmp_name']; $fileSize = $file['size']; $fileName = $file['name']; //錯(cuò)誤,輸出0,表示文件提交成功 $fileError = $file['error']; if($fileError==0) { $inputFileName = $fileTmp; date_default_timezone_set('PRC'); // 讀取excel文件 try { $inputFileType = PHPExcel_IOFactory::identify($inputFileName); $objReader = PHPExcel_IOFactory::createReader($inputFileType); $objPHPExcel = $objReader->load($inputFileName); } catch(Exception $e) { } // 確定要讀取的sheet,什么是sheet,看excel的右下角 $sheet = $objPHPExcel->getSheet(0); $highestRow = $sheet->getHighestRow(); $highestColumn = $sheet->getHighestColumn(); $time = date('Y-m-d h:i:s', time()); // 把數(shù)據(jù)處理后存入數(shù)組 $array = array(); $time = date('Y-m-d h:i:s', time()); for ($row = 2; $row <= $highestRow; $row++) { $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE); // 重復(fù)數(shù)據(jù)不插入數(shù)據(jù)庫(kù) $falg = $rowData[0][0]; $sqlIf = "SELECT codes FROM tablef where codes = '$falg'"; $querySQL = mysqli_query($conn,$sqlIf); $arrSQL = mysqli_fetch_array($querySQL); if($arrSQL == null) { // 獲取到 Excel 每行的數(shù)據(jù)插入數(shù)據(jù)庫(kù),需根據(jù)你自己的表格進(jìn)行調(diào)整 $sql="insert into tablef(codes,year,month,idcode,type,timese) values('".$rowData[0][0]."','" .($rowData[0][1])."','".$rowData[0][2]."','".$rowData[0][3]."','".$rowData[0][4]."','".$time."')"; $query=mysqli_query($conn,$sql);//函數(shù)執(zhí)行一條 MySQL 查詢。 } } // 成功后返回給前端 echo json_encode(["msg" => 'ok']); }else { echo json_encode(["msg" => 'no']); } // 斷開(kāi)數(shù)據(jù)庫(kù)連接 $conn->close(); ?>
結(jié)語(yǔ)
這是原生PHP使用的一個(gè)方式,我PHP的話只會(huì)一個(gè) ThinkPHP 框架,這邊我測(cè)試的話 ThinkPHP 使用起來(lái)跟這個(gè)也是差不多的,至于有些其他的php框架的話我沒(méi)有用過(guò),但是基本都差不多?,F(xiàn)在前后端分離占主導(dǎo)地位,對(duì)于一些做后臺(tái)的兄弟們來(lái)說(shuō),這些批量導(dǎo)入數(shù)據(jù)的是很常見(jiàn)的,這邊就分享一個(gè)簡(jiǎn)單的,對(duì)于一些sql語(yǔ)句的話是需要修改的,這里面的sql語(yǔ)句是不安全的,這里提醒一下大家,測(cè)試的時(shí)候使用這些SQL語(yǔ)句為啥問(wèn)題,生產(chǎn)環(huán)境切記不能這樣用。
到此這篇關(guān)于PHP使用PHPExcel讀取excel數(shù)據(jù)并批量上傳到數(shù)據(jù)庫(kù)的文章就介紹到這了,更多相關(guān)PHP PHPExcel讀取excel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
php+jQuery ajax實(shí)現(xiàn)的實(shí)時(shí)刷新顯示數(shù)據(jù)功能示例
這篇文章主要介紹了php+jQuery ajax實(shí)現(xiàn)的實(shí)時(shí)刷新顯示數(shù)據(jù)功能,結(jié)合實(shí)例形式分析了php結(jié)合jQuery ajax實(shí)時(shí)刷新讀取顯示數(shù)據(jù)庫(kù)數(shù)據(jù)相關(guān)操作技巧,需要的朋友可以參考下2019-09-09php過(guò)濾輸入操作之htmlentities與htmlspecialchars用法分析
這篇文章主要介紹了php過(guò)濾輸入操作之htmlentities與htmlspecialchars用法,結(jié)合實(shí)例形式分析了php數(shù)據(jù)過(guò)濾操作的相關(guān)函數(shù)與使用技巧,需要的朋友可以參考下2017-02-02PHP生成各種隨機(jī)驗(yàn)證碼的方法總結(jié)【附demo源碼】
這篇文章主要介紹了PHP生成各種隨機(jī)驗(yàn)證碼的方法,結(jié)合具體實(shí)例形式總結(jié)分析了php常用的生成驗(yàn)證碼操作相關(guān)技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2017-06-06PHP靜態(tài)方法和靜態(tài)屬性及常量屬性的區(qū)別與介紹
今天小編就為大家分享一篇關(guān)于PHP靜態(tài)方法和靜態(tài)屬性及常量屬性的區(qū)別與介紹,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03php在頁(yè)面中調(diào)用fckeditor編輯器的方法
fckeditor編輯器的代碼可以寫(xiě)成一個(gè)函數(shù)或者類別,直接調(diào)用,不用每次都要寫(xiě)那么多代碼!2011-06-06PHP刪除二維數(shù)組中相同元素及數(shù)組重復(fù)值的方法示例
這篇文章主要介紹了PHP刪除二維數(shù)組中相同元素及數(shù)組重復(fù)值的方法,涉及php針對(duì)數(shù)組的遍歷、判斷、比較等相關(guān)操作技巧,需要的朋友可以參考下2017-05-05