在用ASP語言開發的Web數據庫應用程序中,ADO (ActiveX Data Objects) 已經成為非常流行的工具,而且對於真正的關系型數據庫,比如Oracle、SQL Server,它都不會有局限性。ADO能夠存取多種不同的數據格式,MS Excel電子數據表格就是其中之一。
關於這個應用
可供下載的例程代碼中包括一個ASP文件ReadX1.ASP,一個Excel文件TheWorkbook.xls。你也可以另外加入一些電子數據表文件。
執行ReadXl.ASP頁面,將顯示出可用的電子數據表文件列表。選擇好一個文件,並提交表單後,你將會看到:
一個下拉菜單,其中是工作表名稱
一個下拉菜單,其中是命名的范圍
一個單元格范圍輸入框
第一個工作表的全部內容
可以選擇工作簿文件中的另外一個工作表,或者輸入符合Excel格式的單元格范圍數值,比如:D20:E21 或者 Sheet3!F12:J22。注意:在ADO和ODBC驅動程序中,要用$符合替換分界符號!。
實現步驟
現在對這個應用程序已經有了初步的認識,下面開始討論ASP代碼,看看如何讀取電子數據表的數據,如何找到電子數據簿
(workbook)文件中可用的電子數據表(worksheet)和范圍,並看看實現文件列表選擇的技術。這裡假設你已經熟悉了編寫Html表單的技術,所以對此不做詳細介紹。
基本條件
下面將涉及到ADO對象、方法、屬性、收集和常量。在服務器上安裝IIS後,ADO就存在了,並且還有相關文檔,地址是http://YourServer/IisHelp/ado210.chm (版本2.1),或者http://YourServer/IisHelp/ado/docs/(老版本1.5)。如果需要升級ADO,可以從http://www.microsoft.com/Data/download.htm下載最新版本的MDAC工具包進行安裝。
實現“文件列表選擇”使用到了內建的VBScript腳本對象,相關文檔可以查看http://YourServer/IisHelp/vbscript/htm/vbstoc.htm,如果想查看最新的文檔,請訪問http://msdn.microsoft.com/scripting
(版本5)。當然,在服務器端和客戶端,你都不需要安裝MS Excel。
讀取電子數據表(Worksheet)數據
通過ADO讀取電子數據表與讀取數據庫表的方法基本是一樣的。從下圖可以看到,電子數據表的行被稱作記錄Records,列被稱作字段FIElds。電子數據表或者單元格的范圍可以被看成表Tables,並按照記錄集recordsets進行存取。
SPReadsheet Database Html
< table >
< tr >
< th >NameA< /th >
< th >NameB< /th >
< th >NameC< /th >
< /tr >< tr >
< td >1< /td >
< td >2< /td >
< td >3< /td >
< /tr >< tr >
< td >11< /td >
< td >12< /td >
< td >13< /td >
< /tr >
< /table >
執行下面的步驟,從數據庫表中讀取數據並顯示:
連接數據庫(同樣:打開數據簿文件)
讀取記錄集recordset(同樣:讀取一定范圍的單元格)
循環每一個記錄(同樣:每一行),經過格式化,顯示
建立ADO連接
在連接數據庫或者打開文件前,需要了解一些信息。其中只要是設置名叫DSN的ODBC驅動,但為每一個數據表都建立這樣的ODBC驅動,是非常麻煩的,因為這需要在服務器的控制台上通過“控制面板/ODBC設置”手工完成。
幸好,ASP提供了替代DSN的其他方法,它可以非常容易地在運行時建立連接。比如,字符串“DRIVER={Microsoft Excel Driver?*.xls)};ReadOnly=1;DBQ=C:dirfile.xls",表示了替代DSN打開文件c:dirfile.xls,因此通過這種方法僅僅需要提供給ASP程序一個文件名即可。執行下面的代碼,將從表單中讀取文件名,然後轉換為全路徑,接著生成連接字符串,最後建立並打開這個連接。
vXlFile = Request("XlBook")
vXlFilePath = Server.MapPath(vXlFile) ' assumes file in current directory
vConnString = "DRIVER={Microsoft Excel Driver (*.xls)};ReadOnly=1;DBQ=" & _
vXlFilePath
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open vConnString
如果想查看更多的非DSN連接信息,請打開Windows或者NT System目錄下的幫助文件Odbcjet.hlp。
讀取記錄集
連接上電子數據簿文件後,讀取一定范圍的單元格數據就很簡單了。盡管不是必須的,但還是建議:用符合“[” 和 “]”包含住單元格的范圍定義。只所以這麼做,是以防在數據庫的操作中產生非法的符合。
vXlRange = Request("XlRange")
Set oRs = oConn.Execute("[" & vXlRange & "]")
執行上面的語句,將返回記錄集對象,其中包括范圍內單元格的所有可用信息, 記錄集的數值和描述數據的元數據。