在ASP網(wǎng)頁中訪問Excel文件Excel文件可以作為活動文檔(ActiveX Document)在活動文檔容器(ActiveX Document Container)中打開,而IE就是一個活動文檔容器,所以當(dāng)頁面中的鏈接指向一個Excel文件時,單擊此鏈接即可啟動Excel,最終將文件顯示在IE窗口中。這種方法雖然簡單,但存在不少缺陷:客戶機內(nèi)必須安裝Excel。在企業(yè)內(nèi)部網(wǎng)上還有可能做到,但Internet上就不現(xiàn)實了。訪問文檔時將啟動Excel,速度較慢。若覽器不是IE,則可能不是活動文檔容器,因此將不能正確顯示文件。
下面介紹一種在ASP文件中通過ADO訪問Excel文件的方法。----ADO是微軟發(fā)布的基于OLEDB技術(shù)的數(shù)據(jù)庫編程接口,通過ODBC驅(qū)動程序可以訪問多種不同格式的數(shù)據(jù)文件,其中包括Excel文件。要獲得Excel的ODBC驅(qū)動程序,可以通過安裝Office97,也可以去微軟的站點下載。正確安裝后在控制面板中會出現(xiàn)ODBC數(shù)據(jù)源管理器,打開它確認(rèn)在驅(qū)動程序頁中有Excel的驅(qū)動程序。 然后編寫B(tài)row.ASP程序,如下例所示。例中假設(shè)在同一目錄下有Excel文件01.xls,且包含名為sheet1的工作表,工作表的第一行為列標(biāo)題,以后為相應(yīng)的數(shù)據(jù)。 Brow.asp: 程序代碼: <% Const adOpenStatic = 3 Dim conn Dim rs ,dbPath Set conn = erver.CreateObject("ADODB.Connection") ‘ 生成實際路 dbPath=server.MapPath("01.xls") ‘ 驅(qū)動程序名稱必須與ODBC中的驅(qū)動程序名完全一致,包括空格 conn.Open "driver={Microsoft Excel Driver (*.xls)};dbq=" & dbPath Set rs = Server.CreateObject("ADODB.Recordset") ‘ 在工作表后加上$,同時必須在工作表名外加括號 rs.Open "[sheet1$]", conn, adOpenStatic % > < html > < head > < meta http-equiv="Content-Type" content="text/html; charset=gb_2312-80" > < meta name="GENERATOR" content="Microsoft FrontPage Express 2.0" > < title > 瀏覽Excel數(shù)據(jù)表< /title > < /head > < body bgcolor="#FFFFFF" > < h2 align="center" >Brow.asp - 瀏覽Excel數(shù)據(jù)表< /h2 > < hr > < % Response.Write "< CENTER >< TABLE BORDER=1 >" Response.Write "< TR BGCOLOR=#00FFFF >" Response.WRITE "< TD >編號< /TD >" ‘ 顯示每列的標(biāo)題 For i=0 to rs.Fields.Count-1 Response.WRITE "< TD >" & rs.Fields(i).Name & "< /TD >" Next Response.Write "< /TR >" RecNo=1 ‘ 顯示工作表中的所有數(shù)據(jù) Do While Not rs.EOF Response.Write "< TR > " Response.Write "< TD >" & RecNo & "< /TD >" ‘顯示各列的數(shù)據(jù) For i=0 to rs.Fields.Count-1 Response.WRITE "< TD >" & rs.Fields(i).Value & "< /TD >" Next Response.Write "< /TR >" rs.MoveNext RecNo=RecNo+1 Loop Response.Write "< /TABLE >< /CENTER >" % > < hr > < /body > < /html > ODBC 將指定的工作表的第一行各列的內(nèi)容識別成字段名,以下各行作為相應(yīng)的數(shù)據(jù),若打開的工作表中數(shù)據(jù)將沒有按此規(guī)律出現(xiàn),則需要指定范圍。例如數(shù)據(jù)塊出現(xiàn)在B2:V28范圍之內(nèi),即B2:V2為各字段名,以下為數(shù)據(jù),則應(yīng)使用以下語句打開RecordSet:rs.open"[sheet1$B2:V28]",conn,adOpenStatic 還可以用select語句選擇出指定區(qū)域內(nèi)的相應(yīng)列,例如:rs.open"select學(xué)號,姓名from[sheet1$B2,V28]",conn 使用以上方法訪問Excel文件速度非??欤驗樗恍枰獑覧xcel,同時無論客戶端是什么瀏覽器都能看到文件內(nèi)容。但要注意以下兩點:Excel的ODBC驅(qū)動程序不支持對Excel文件的添加和刪除。有些Excel中可以使用的工作表名ADO不支持,例如名為"123"的工作表就無法用上述方法打開。須與ODBC中的驅(qū)動程序名完全一致,包括空格 conn.Open "driver={Microsoft Excel Driver (*.xls)};dbq=" & dbPath Set rs = Server.CreateObject("ADODB.Recordset") ‘ 在工作表后加上$,同時必須在工作表名外加括號 rs.Open"[sheet1$]", conn, adOpenStatic % > < html > < head > < meta http-equiv="Content-Type" content="text/html; charset=gb_2312-80" > < meta name="GENERATOR" content="Microsoft FrontPage Express 2.0" > < title > 瀏覽Excel數(shù)據(jù)表< /title > < /head > < body bgcolor="#FFFFFF" > < h2 align="center" >Brow.asp - 瀏覽Excel數(shù)據(jù)表< /h2 > < hr > < % Response.Write "< CENTER >< TABLE BORDER=1 >" Response.Write "< TR BGCOLOR=#00FFFF >" Response.WRITE "< TD >編號< /TD >" ‘ 顯示每列的標(biāo)題 For i=0 to rs.Fields.Count-1 Response.WRITE "< TD >" & rs.Fields(i).Name & "< /TD >" Next Response.Write "< /TR >" RecNo=1 ‘ 顯示工作表中的所有數(shù)據(jù) Do While Not rs.EOF Response.Write " |
|
|