PHPExcel將excel表的資料匯入資料庫
阿新 • • 發佈:2018-11-09
一:話不多說,上乾貨
1.首先,需要建立個數據庫 product
資料庫程式碼參考:
/* Navicat MySQL Data Transfer Source Server : TP-jifen-demo Source Server Version : 50717 Source Host : localhost:3306 Source Database : product Target Server Type : MYSQL Target Server Version : 50717 File Encoding : 65001 Date: 2018-07-20 20:15:34 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `pro_info` -- ---------------------------- DROP TABLE IF EXISTS `pro_info`; CREATE TABLE `pro_info` ( `pId` int(4) NOT NULL AUTO_INCREMENT, `pName` varchar(20) NOT NULL, `pPrice` float NOT NULL, `pCount` float NOT NULL, PRIMARY KEY (`pId`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=gb2312; -- ---------------------------- -- Records of pro_info -- ----------------------------
2.整個excel備用,測試必備,大致這樣就可以
3.建立專案demo,結構如下(紅框重點,Public資料夾下可能還需要個Uploads資料夾用來存放臨時檔案)
config.php:
<?php return array( //'配置項'=>'配置值' 'DB_TYPE' => 'mysql', // 資料庫型別 'DB_HOST' => 'localhost', // 伺服器地址 'DB_NAME' => 'product', // 資料庫名 'DB_USER' => 'root', // 使用者名稱 'DB_PWD' => '', // 密碼。。 'DB_PORT' => '3306', // 埠 'DB_PREFIX' => 'pro_', // 資料庫表字首 );
IndexController.class.php(有部分註釋為本人除錯時修改,請輕噴)
<?php /** * @Author: ND01 * @Date: 2018-07-19 16:13:25 * @Last Modified by: ND01 * @Last Modified time: 2018-07-21 09:16:50 */ /** * * 匯入Excel檔案資料到MySQL資料庫 */ namespace Home\Controller; use Think\Controller; class IndexController extends Controller { /** * 顯示上傳表單html頁面 */ public function index() { $this->display(); } /** * 上傳Excel檔案 */ public function upload() { //引入ThinkPHP上傳檔案類 import('ORG.Net.UploadFile'); $config = array( 'exts' => array('xlsx','xls'), 'maxSize' => 3145728000, 'rootPath' =>"./Public/", 'savePath' => 'Uploads/', 'subName' => array('date','Ymd'), ); //例項化上傳類 $upload = new \Think\Upload($config); // dump($upload);die; //存在同名檔案是否是覆蓋 $upload->uploadReplace = true; if (!$info = $upload->upload()) { //如果上傳失敗,提示錯誤資訊 $this->error($upload->getError()); } else { //上傳成功 //獲取上傳檔案資訊 // $info = $upload->upload(); //獲取上傳儲存檔名 $filename = $info['file']['savename']; $savepath = $info['file']['savepath']; // dump($filename);die; //重定向,把$fileName檔名傳給importExcel()方法 // $this->success('Index/importExcel', array('filename' => $filename), 1, '上傳成功!'); header("content-type:text/html;charset=utf-8"); //引入PHPExcel類 // vendor('PHPExcel'); vendor("PHPExcel.PHPExcel"); vendor('PHPExcel.IOFactory'); vendor('PHPExcel.Reader.Excel5'); // $info= $_GET['info'];dump($info);die; //redirect傳來的檔名 // $filename = $_GET['filename']; // $filepath = $_GET['filepath']; // $info= $_GET['info'];dump($info);die; // dump($filename);die; //檔案路徑 $filePath = './Public/' . $savepath. $filename ; // dump($savePath);die; //例項化PHPExcel類 // $PHPExcel = new \Think\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; } } // dump($PHPReader);die; //讀取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 = D('Info'); $num = $m->add(array('pName' => $name, 'pPrice' => $price, 'pCount' => $count)); } if ($num > 0) { echo "新增成功!"; } else { echo "新增失敗!"; } } } } ?>
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.測試
二:總結
文章說明:因學習時瀏覽網站較多且參考網站較多,如有參考內容轉載絕非有意,若有侵犯,還請告知。
問題總結:學習過程中出現過很多問題。如找不到檔案的問題,嘗試多處使用dump來檢視變數值,保證程式碼走得通。
多次出現The filename * is not readable錯誤,大致分為兩種問題,一種是路徑問題,一定要多檢查、修改、測試,另一種是檔案許可權問題,可以百度解決(註明一點,我的檔案只讀也取消不了,百度到的合理解釋為:https://baike.1688.com/doc/view-d26261162.html就是說並不影響)。
注意PHPExcel外掛放於Vendor目錄下。
文章若有錯誤或問題,歡迎指出。