woff 發表於 2011-11-14 00:02:55

PHPExcel 資料匯入MYSQL 資料庫(excel 2003 2007都能用)

需要LINUX元件

[*]php-zip
[*]php-xml
[*]php-xmlrpc


筆者再使用PHPExcel 時,爬了很多文章,問題就卡在於
有的能用EXCEL 2003,有的能用EXCEL 2007
就是不能同時使用,所以筆者修改了些程式語法

首先建立global.php檔案 <?php
$mydbhost = "localhost";
$mydbuser = "root";
$mydbpw = "12345678";
$mydbname = "xxxxx";
$mydbcharset = "UTF8";
$db = @mysql_connect($mydbhost,$mydbuser,$mydbpw);
if (!$db) {
      exit('Unable connect MYSQL at this time');
}
if (!@mysql_select_db($mydbname)) {
      exit ('Unable connect DB at this time');
}
mysql_query("SET NAMES $mydbcharset", $db);
?>建立test1.php檔案 <?php
include_once ('global.php');
if (isset($_POST["send"])) {
$leadExcel=$_POST["leadExcel"];;

if($leadExcel == "true"){

//獲取上傳的文件名
$filename = $_FILES['inputExcel']['name'];

//上傳到服務器上的臨時文件名
$tmp_name = $_FILES['inputExcel']['tmp_name'];
$msg = uploadFile($filename,$tmp_name);
}
}
if (isset($_POST["clear"])) {
$sql = "TRUNCATE TABLE net_mailuser";
if(!mysql_query($sql)){
return false;
}
echo '<script>alert(\'電子報會員資料已清空!\');window.location=\'test1.php\';</script>';
}
?>

<form name="form2" method="post" action="<?php $_SERVER['PHP_SELF']?>" enctype="multipart/form-data">
<input type="hidden" name="leadExcel" value="true">
<table align="center" width="90%" border="0">
<tr>
<td>
<input type="file" name="inputExcel"><input type="submit" value="上傳" name="send">
</td>
</tr>
<tr>
<td>
<input type="submit" value="清空電子報會員資料" name="clear">
</td>
</tr>
</table>
</form>


<?
//導入Excel文件
function uploadFile($file,$filetempname) {
//自己設置的上傳文件存放路徑
$filePath = 'uploads/';
$str = "";

require_once("PHPExcel/IOFactory.php");

$filename=explode(".",$file);//把上傳的文件名以「.」好為準做一個數組。
$time=date("y-m-d-H-i-s");//去當前上傳的時間
$filename=$time;//取文件名t替換
$name=implode(".",$filename); //上傳後的文件名
$uploadfile=$filePath.$name;//上傳後的文件名地址

//move_uploaded_file() 函數將上傳的文件移動到新位置。若成功,則返回 true,否則返回 false。
$result=move_uploaded_file($filetempname,$uploadfile);//假如上傳到當前目錄下
if($result) { //如果上傳文件成功,就執行導入excel操作

$objPHPExcel = PHPExcel_IOFactory::load($uploadfile);
$objPHPExcel->setActiveSheetIndex(0);
$sheet = $objPHPExcel->getActiveSheet();
$highestRow = $sheet->getHighestRow(); // 取得總行數
$highestColumn = $sheet->getHighestColumn(); // 取得總列數

//循環讀取excel文件,讀取一條,插入一條
for($j=2;$j<=$highestRow;$j++){
for($k='A';$k<=$highestColumn;$k++){
$str .= $objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue().'\\';
//讀取單元格
}
//explode:函數把字符串分割為數組。
$strs = explode("\\",$str);
$sql = "INSERT INTO net_mailuser(name,email,phone,cell,address,qa,ps,psname) VALUES('$strs','$strs','$strs','$strs','$strs','$strs','$strs','$strs')";
if(!mysql_query($sql)){
return false;
}
$str = "";
}

unlink($uploadfile); //刪除上傳的excel文件
echo '<script>alert(\'匯入完成!\');window.location=\'test1.php\';</script>';
}else{
echo '<script>alert(\'匯入失敗!\');window.location=\'test1.php\';</script>';
}
}
?>資料庫欄位設置 CREATE TABLE IF NOT EXISTS `net_mailuser` (
`id` int(5) NOT NULL auto_increment,
`name` char(255) default NULL,
`email` char(255) default NULL,
`phone` char(255) default NULL,
`cell` char(255) default NULL,
`address` char(255) default NULL,
`qa` varchar(255) default NULL,
`ps` varchar(255) default NULL,
`psname` varchar(255) default NULL,
PRIMARY KEY(`id`)
);
目前都已測試成功,如果有問題可在下面回文

YanLongChen 發表於 2013-9-12 17:54:30

表單按鈕的值是亂碼,且好像無法匯入mysql?

woff 發表於 2013-9-12 18:28:06

YanLongChen 發表於 2013-9-12 17:54 static/image/common/back.gif
表單按鈕的值是亂碼,且好像無法匯入mysql?

這已經測試成功的程式
按鈕亂碼請改網頁編碼
多測試幾次就OK了

YanLongChen 發表於 2013-9-13 17:35:30

本帖最後由 YanLongChen 於 2013-9-13 17:38 編輯

Dear woff:
我是把程式碼複製作成檔案,然後放在APAche上,然後載PHPExcel,把PHPExcel資料夾整個複製到根目錄,然後在test1.php檔第46行 $filePath = '333';改成自己網站的根目錄下,發現上傳進去的檔案出現在根目錄下但是無法匯入資料庫卻出現這行 :Fatal error: Class 'PHPExcel' not found in C:\AppServ\www\333\PHPExcel\Reader\Excel5.php on line 574

我想問你是如何使用PHPExcel?
你是用這個麼:http://phpexcel.codeplex.com/


woff 發表於 2013-9-13 18:37:45

333不是跟目錄阿 www 才是跟目錄

YanLongChen 發表於 2013-9-13 20:11:00

woff 發表於 2013-9-13 18:37 static/image/common/back.gif
333不是跟目錄阿 www 才是跟目錄

了解。$filePath的值應該是上傳時暫時放的目錄沒錯吧。

我再重寫一次,我是把程式碼複製作成檔案,然後放在APAche上,然後載PHPExcel,把PHPExcel資料夾整個複製到根目錄下的333資料夾,然後在test1.php檔第46行 $filePath = '333';改成自己網站的根目錄下的333資料夾,發現上傳進去的檔案出現在根目錄下的333資料夾但是無法匯入資料庫卻出現這行 :Fatal error: Class 'PHPExcel' not found in C:\AppServ\www\333\PHPExcel\Reader\Excel5.php on line 574,是我
PHPExcel部分弄錯了嗎?我想請問woff,謝謝....感激不盡

woff 發表於 2013-9-13 23:15:07

333資料夾拿掉 直接用PHPExcel COPY到跟目錄及可

YanLongChen 發表於 2013-9-14 22:15:37

woff 發表於 2013-9-13 23:15 static/image/common/back.gif
333資料夾拿掉 直接用PHPExcel COPY到跟目錄及可

上面的程式碼做成PHP檔案放進PHPExcel裡,還是不行(C:\AppServ\www\PHPExcel),就是放www資料夾裡面,$filePath = 'PHPExcel';(放在C:\AppServ\www\PHPExcel)。
我想直接引用PHPexcel來匯入excel檔到資料庫裡,就是資料表的資料有增加我匯入的EXCEL檔的內容。連結https://www.dropbox.com/s/fcu87as051uqnrv/333.rar,請看是不是我用錯了,還是PHPEXCEL版本問題?我是PHP新手,想學好PHP,還請多多指教,謝謝!

woff 發表於 2013-9-14 22:37:09

$filePath 是你EXCEL檔案上傳目錄
PHPEXCEL放的位置
49.require_once("PHPExcel/IOFactory.php");

這段有說

所以你根本搞錯

YanLongChen 發表於 2013-9-15 01:55:17

本帖最後由 YanLongChen 於 2013-9-15 02:11 編輯

woff 發表於 2013-9-14 22:37 static/image/common/back.gif
$filePath 是你EXCEL檔案上傳目錄
PHPEXCEL放的位置
49.require_once("PHPExcel/IOFactory.php");
$filePath是EXCEL檔上傳後的存放路徑?例如:xxx.xls在桌面,上傳路徑設在C硬碟裡,所以是$filePath='C:\'是這樣嗎?require_once("IOFactory.php");改這樣還是不行?





頁: [1] 2 3 4 5
查看完整版本: PHPExcel 資料匯入MYSQL 資料庫(excel 2003 2007都能用)