如何使用PHP連接Excel資料表單?

Excel是不是資料庫? 在談這個問題之前,我們先實際試著使用PHP連接Excel資料表單,再來討論Excel與資料庫的關係。

PHP連接Excel資料表單,可以用以下步驟來達成 : 

(1) 先透過ODBC來定義資料來源。

以前在Windows介面可以由控制台透過ODBC來定義資料來源,但是到了Windows 11就找不到了,但是其實那個程式還是在Windows 11的系統裡面。

我們可以從 windows/system32/ 目錄下找到 odbcad32.exe 檔案 : 



執行這個檔案之後,就會出現ODBC定義資料來源的介面了,如下圖,接著按下「新增」,開始來定義資料來源。



然後,就會看到如下畫面,選擇Microsoft Excel Driver,並按下「完成」。 



接著輸入資料來源名稱,這個名稱由你自己定義,這裡我輸入了 myexcel,然後按下「選取活頁簿」。




再來選取要連接的Excel檔案,這裡我選擇了一個測試檔案 test.xlsx。



按下「確定」之後,再一路按確定回去就完成了。

(2) 再來要讓PHP知道怎麼連接這個ODBC定義好的資料來源。

打開PHP的設定檔 php.ini,找到以下設定 : 

;extension=odbc

把註解符號去掉,變成

extension=odbc

再重新啟動PHP,這樣PHP就帶入了ODBC的驅動程式了。

(3) 寫一個測試的PHP程式,並準備好Excel檔案。

測試的PHP程式 test.php 如下 : 

<?php 
$conn = odbc_connect('myexcel','',''); 
$query = 'select * from [test$]'; 
$rs = odbc_exec($conn, $query); 
while (odbc_fetch_row($rs)) { 
    $myname = odbc_result($rs, 'myname'); 
    $myphone = odbc_result($rs, 'myphone'); 
    echo "MyName : $myname Myphone : $myphone <P>"; 
?>

因為剛剛定義了一個 myexcel 的資料來源,所以使用 $conn = odbc_connect('myexcel','','');  來連接,後面兩個空白原本是使用者帳號跟密碼,因為Excel檔案沒有帳號跟密碼,所以空白即可。

$query = 'select * from [test$]';  的意思是從 test 這個活頁簿來存取資料。

$myname = odbc_result($rs, 'myname');  的意思則是test 這個活頁簿有個myname的欄位。




(4) 最後就可以執行這個 test.php了,如下圖 : 


在這個練習中,我們可以看到 Excel的「活頁簿」像是一個「資料表單」,而活頁簿的第一列可以定義為資料表單的「欄位」,第二列以下就是「資料列」。

再回到最開頭的問題 : Excel是不是資料庫? 

因為Excel可以「模擬」為資料庫,因此你可以說「Excel是資料庫」,但是可以被存取,具備「資料表單」特性,具備「欄位」跟「資料列」,就是資料庫嗎?

資料庫(Database)是一種系統化的資料儲存方式,用來有效管理、檢索和操作資料。要被稱為資料庫,看起來 Excel 似乎是這麼回事,但是就嚴謹的資料庫定義來說,Excel缺乏了以下特性 : 

(A) 資料的安全性 : 沒有使用者權限管理機制。
(B) 資料的一致性與完整性 : 無法透過主鍵、外鍵等約束來關聯資料。
(C) 資料的並行控制 : 無法處理鎖定等需求。
(D) 支援交易管理 : 沒有回復(rollback)功能。
(E) 資料的可擴展性 : 無法因應資料增加而擴展。
(F) 資料索引 : 沒有索引功能。


結論 : 
Excel雖然可以模擬資料庫的部分特性,但是並不具備資料庫所有的特性。因此廣義來說,Excel可以稱為資料庫,但是狹義來說,Excel並不是資料庫。

另外,從以上的練習,看起來似乎可以將 $query = 'select * from [test$]'; 修改為其他的SQL指令。

例如 
$query = 'delete from [test$]'; 
或是 
$query = "delete from [test$] where myname='John'";

但是都會產生錯誤訊息,因為ODBC對於PHP連接Excel,只有讀取的功能,並沒有刪除/修改/插入。如果需要額外的功能,必須使用其他程式庫。



張貼留言

0 留言