Excel 檔直接匯入 MySQL 資料庫:不用轉檔、不會中文和日韓文亂碼...
Excel 檔直接匯入 MySQL 資料庫
本小站下載
: PHPExcel紅色字部份
,只要更改您的資料庫資料即可。範例設定的 MySQL 相關名稱如下。MySQL 連線部份,可參考笨兔另一篇隨手筆記【db_002】PHP 連接 MySQL 資料庫。
<?php
$dbhost = "localhost"; //改成您的資料庫資料 $dbuser = "root"; $dbpass = "12345678"; $dbname = "my_collection"; $conn=mysql_connect($dbhost,$dbuser,$dbpass) or die('Error with MySQL connect'); mysql_query("SET NAMES 'UTF8'"); mysql_select_db($dbname); require_once 'PHPExcel/Classes/PHPExcel.php'; //必導入的PHPExel if($_GET['excelfile']!=NULL){ $file=$_GET['excelfile']; //完整路徑檔名 $pos=mb_strrpos($file,"\\"); //路徑最後出現\的位置 $pos2=mb_strrpos($file,"."); //路徑最後出現.的位置 $len=mb_strlen($file); $fileName=mb_substr($file,$pos+1,($pos2-$pos-1)); //擷取檔案名(不含副檔名) $fileName1=mb_substr($file,$pos+1); //擷取檔案名(含副檔名) try { $objPHPExcel = PHPExcel_IOFactory::load($file); } catch(Exception $e) { die('Error loading file "'.pathinfo($file,PATHINFO_BASENAME).'": '.$e->getMessage()); } $sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true); foreach($sheetData as $key => $col) { if ($key != 0){ //0表示從Excel第一行開始讀取,1從第二行 $a = array(); foreach ($col as $colkey => $colvalue) { array_push($a,$colvalue); } //讀取第1行,把它拿來當資料表的欄位名,預設都為文字text型態 if($key=='1'){ $i=count($a); //計算有幾欄 for($j=0;$i>$j;$j++){ if($j==0){ $table_col="`".$a[$j]."` text"; //第1欄不加,分隔 $table_col1="`".$a[$j]."`"; }else{ $table_col=$table_col.",`".$a[$j]."` text"; //第2欄後都加,分隔 $table_col1=$table_col1.",`".$a[$j]."`"; //此是用來寫入資料用的欄位 } } //建資料表 $sql = 'CREATE TABLE `'.$fileName.'` ('.$table_col.')'; //若資料表已存在也沒關係,只是每個欄位名稱要和您設在EXCEL第一行的一樣,才能成功寫入資料 if (mysql_query($sql)){ echo '資料表 '.$fileName.' 建立成功'; }else { echo '<font color="red">資料表 '.$fileName.' 建立失敗 (可能已存在了!)</font>'; } }else{ $i=count($a); for($j=0;$i>$j;$j++){ //讀取每行各欄位資料 if($j==0){ $table_data="'".addslashes($a[$j])."'"; //第1欄不加,分隔 }else{ $table_data=$table_data.",'".addslashes($a[$j])."'"; //第2欄後都加,分隔 } } $sql ="INSERT INTO `".$fileName."` (".$table_col1.") VALUES (".$table_data.")"; $result = mysql_query($sql) or die(mysql_error()); } } } } ?> <!doctype html> <html> <head> <meta charset="utf-8"> <title>喵喵笨兔 - Excel 檔直接匯入 MySQL </title> </head> <body> <h3 align="center">喵喵笨兔 - Excel 檔直接匯入 MySQL (自動建立資料表及欄位)</h3> <div> <form method="get"> <label for="fileField">要轉換的 EXCEL 檔 (勿用中文檔名):</label> <input type="file" name="excelfile" id="excelfile"> <input type="submit" name="submit" id="submit" value="開始匯入"> </form> </div> </body> </html>
【範例結果】
紅色字部份
。<?php $dbhost = "localhost"; //改成您的資料庫資料 $dbuser = "root"; $dbpass = "12345678"; $dbname = "my_collection"; $conn=mysql_connect($dbhost,$dbuser,$dbpass) or die('Error with MySQL connect'); mysql_query("SET NAMES 'UTF8'"); mysql_select_db($dbname); require_once 'PHPExcel/Classes/PHPExcel.php'; //必導入的PHPExel //須先在您的MySQL建立對應的資料表及欄位名 //改您要匯入的完整路徑檔案名稱 (放在同目錄內) $file = "abc.xls"; try { $objPHPExcel = PHPExcel_IOFactory::load($file); } catch(Exception $e) { die('Error loading file "'.pathinfo($file,PATHINFO_BASENAME).'": '.$e->getMessage()); } $sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true); foreach($sheetData as $key => $col) { if ($key != 0){ //0表示從Excel第一行開始讀取,1從第二行 $a = array(); foreach ($col as $colkey => $colvalue) { array_push($a,$colvalue); } //匯入每筆資料,此例是四個欄位(由0開始),若三欄位就留三行, //若五行則數字漸增加入如 $a4=addslashes($a[4]); 以此類推 $a0=addslashes($a[0]); $a1=addslashes($a[1]); $a2=addslashes($a[2]); $a3=addslashes($a[3]); //INTO 後面改您的建立好的資料表名稱,() 內改您的資料表欄位名稱 //VALUES() 內加入上面您抓取幾個欄位代號 $sql =("INSERT INTO 資料表名稱 (`欄位名1`,`欄位名2`,`欄位名3`,`欄位名4`) VALUES ('$a0','$a1','$a2','$a3')"); $result = mysql_query($sql) or die(mysql_error()); } } ?>