日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

使用PhpSpreadsheet将Excel导入到MySQL数据库

發布時間:2023/12/9 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用PhpSpreadsheet将Excel导入到MySQL数据库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用PhpSpreadsheet將Excel導入到MySQL數據庫

?

?

?

日常開發中,我們經常遇到這樣的場景,需要將一個Excel表格數據如客戶信息、學生成績表導入到系統數據庫中,然后在系統中進行進一步操作,如給導入的客戶群發短信,統計學生成績排名。PHP導入Excel避免了人工錄入信息的麻煩和出錯,提高效率。

下載源碼

本文以導入學生成績表為例,給大家講解使用PhpSpreadsheet將Excel導入的MySQL數據庫。

準備

首先我們需要準備一張MySQL表,表名t_student,表結構如下:

CREATE TABLE `t_student` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT,`name` varchar(32) NOT NULL COMMENT '姓名',`chinese` int(6) NOT NULL DEFAULT '0' COMMENT '語文',`maths` int(6) NOT NULL DEFAULT '0' COMMENT '數學',`english` int(6) NOT NULL DEFAULT '0' COMMENT '外語',PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

這是一張學生成績表,用來存儲學生的姓名和語數外三門課程的成績。

接著,我們準備excel表格文件,我特意制作了一個Excel文件students.xlsx:

然后將Excel文件放置程序應用目錄下。當然,實際應用中,我們一般通過web上傳到服務器指定目錄下,然后再進行導入數據庫操作。本文web上傳這塊就不涉及了,感興趣的同學可以參考本站文章:Dropzone.js實現文件拖拽上傳,功能強大的文件上傳組件-WebUploader。

最后,你還需要安裝好PhpSpreadsheet,在前一節文章中有介紹,非常簡單:使用PhpSpreadsheet讀取和寫入Excel

導入Excel

準備工作做好后,我們來開始導入。

思路很簡單:使用PhpSpreadsheet讀取Excel表格中的有用信息,然后組裝成sql語句,最后批量插入到MySQL表中。我把代碼貼出來。

require 'vendor/autoload.php';include('conn.php'); //連接數據庫$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx'); $reader->setReadDataOnly(TRUE); $spreadsheet = $reader->load('students.xlsx'); //載入excel表格$worksheet = $spreadsheet->getActiveSheet(); $highestRow = $worksheet->getHighestRow(); // 總行數 $highestColumn = $worksheet->getHighestColumn(); // 總列數 $highestColumnIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($highestColumn); // e.g. 5$lines = $highestRow - 2; if ($lines <= 0) {exit('Excel表格中沒有數據'); }$sql = "INSERT INTO `t_student` (`name`, `chinese`, `maths`, `english`) VALUES ";for ($row = 3; $row <= $highestRow; ++$row) {$name = $worksheet->getCellByColumnAndRow(1, $row)->getValue(); //姓名$chinese = $worksheet->getCellByColumnAndRow(2, $row)->getValue(); //語文$maths = $worksheet->getCellByColumnAndRow(3, $row)->getValue(); //數學$english = $worksheet->getCellByColumnAndRow(4, $row)->getValue(); //外語$sql .= "('$name','$chinese','$maths','$english'),"; } $sql = rtrim($sql, ","); //去掉最后一個,號 try {$db->query($sql);echo 'OK'; } catch (Exception $e) {echo $e->getMessage(); }

$worksheet->getCellByColumnAndRow($col, $row)->getValue()可以獲取表格中任意單元格數據內容,$col表示單元格所在的列,以數字表示,A列表示第一列,$row表示所在的行。

我們只需要第三行以后的數據,因此直接從第三行開始循環遍歷,獲取成績,組裝成SQL語句。

我們使用批量插入MySQL語句,當然你也可以逐條插入,但是效率沒有批量插入高。

最后執行導入代碼,你會發現數據表里有數據了:

MariaDB [demo]> select * from t_student; +----+-----------+---------+-------+---------+ | id | name | chinese | maths | english | +----+-----------+---------+-------+---------+ | 13 | 王二小 | 82 | 78 | 65 | | 14 | 李萬豪 | 68 | 87 | 79 | | 15 | 張三豐 | 89 | 90 | 98 | | 16 | 王老五 | 68 | 81 | 72 | +----+-----------+---------+-------+---------+ 4 rows in set (0.00 sec)

數據庫連接文件已打包在源代碼中,歡迎下載。

總結

以上是生活随笔為你收集整理的使用PhpSpreadsheet将Excel导入到MySQL数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。