Excel文件可以作为活动文档(ActiveX Document)在活动文档容器(ActiveX Document Container)中打开,而IE就是一个活动文档容器,所以当页面中的链接指向一个Excel文件时,单击此链接即可启动Excel,最终将文件显示在IE窗口中。这种方法虽然简单,但存在不少缺陷:客户机内必须安装Excel。在企业内部网上还有可能做到,但Internet上就不现实了。访问文档时将启动Excel,速度较慢。若览器不是IE,则可能不是活动文档容器,因此将不能正确显示文件。
下面介绍一种在ASP文件中通过ADO访问Excel文件的方法。----ADO是微软发布的基于OLEDB技术的数据库编程接口,通过ODBC驱动程序可以访问多种不同格式的数据文件,其中包括Excel文件。要获得Excel的ODBC驱动程序,可以通过安装Office97,也可以去微软的站点下载。正确安装后在控制面板中会出现ODBC数据源管理器,打开它确认在驱动程序页中有Excel的驱动程序。
然后编写Brow.ASP程序,如下例所示。例中假设在同一目录下有Excel文件01.xls,且包含名为sheet1的工作表,工作表的第一行为列标题,以后为相应的数据。
Brow.asp:
程序代码:
--------------------------------------------------------------------------------
<%
Const adOpenStatic = 3
Dim conn Dim rs ,dbPath Set conn = erver.CreateObject("ADODB.Connection") ' 生成实际路
dbPath=server.MapPath("01.xls") ' 驱动程序名称必须与ODBC中的驱动程序名完全一致,包括空格
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数据表< /title >
< /head >
< body bgcolor="#FFFFFF" >
< h2 align="center" >Brow.asp - 浏览Excel数据表< /h2 >
< hr >
< %
Response.Write "< CENTER >< TABLE BORDER=1 >"
Response.Write "< TR BGCOLOR=#00FFFF >"
Response.WRITE "< TD >编号< /TD >" ' 显示每列的标题
For i=0 to rs.Fields.Count-1
Response.WRITE "< TD >" & rs.Fields(i).Name & "< /TD >"
Next
Response.Write "< /TR >" RecNo=1
' 显示工作表中的所有数据
Do While Not rs.EOF
Response.Write "< TR > "
Response.Write "< TD >" & RecNo & "< /TD >"
'显示各列的数据
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 将指定的工作表的第一行各列的内容识别成字段名,以下各行作为相应的数据,若打开的工作表中数据将没有按此规律出现,则需要指定范围。例如数据块出现在B2:V28范围之内,即B2:V2为各字段名,以下为数据,则应使用以下语句打开RecordSet:rs.open"[sheet1$B2:V28]",conn,adOpenStatic
还可以用select语句选择出指定区域内的相应列,例如:rs.open"select学号,姓名from[sheet1$B2,V28]",conn
使用以上方法访问Excel文件速度非常快,因为它不需要启动Excel,同时无论客户端是什么浏览器都能看到文件内容。但要注意以下两点:Excel的ODBC驱动程序不支持对Excel文件的添加和删除。有些Excel中可以使用的工作表名ADO不支持,例如名为"123"的工作表就无法用上述方法打开。须与ODBC中的驱动程序名完全一致,包括空格
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数据表< /title >
< /head >
< body bgcolor="#FFFFFF" >
< h2 align="center" >Brow.asp - 浏览Excel数据表< /h2 >
< hr > < %
Response.Write "< CENTER >< TABLE BORDER=1 >"
Response.Write "< TR BGCOLOR=#00FFFF >"
Response.WRITE "< TD >编号< /TD >" ' 显示每列的标题
For i=0 to rs.Fields.Count-1
Response.WRITE "< TD >" & rs.Fields(i).Name & "< /TD >"
Next
Response.Write "< /TR >" RecNo=1 ' 显示工作表中的所有数据
Do While Not rs.EOF Response.Write "