某些情况下我们在asp中使用excel作为数据库,读出或者写入数据到.xls文件.adodb.connect不仅仅可以操作我们熟悉的sql/access,也可以用来操作不常使用与asp的数据库,例如foxpro/mysql/excel等.
xls文件不是严整的关系型的数据库,但是我们仍然可以使用通常所见的方法,操作其中包含的数据.和常见的桌面数据库access类比,就可以知道操作excel的办法.
1、一个.xls文件可以看成一个数据库,类似于.mdb文件,其中的每一个工作(sheet)看成数据库表,相当于access中的一个table.
2、excel中表格第一行的数据(标题)为字段名,字段名不能够包含数字.
3、如果你的Excel电子表格中某一列同时包含了文本和数字的话,那么Excel的ODBC驱动将不能够正常, 处理这一行的数据类型,你必须要保证该列的数据类型一致.
例如下面的代码
dim conn,rs,sqlstr
Set conn = Server.CreateObject("adodb.connection")
conn.open "Driver={Microsoft Excel Driver (*.xls)};" & "DBQ=" & Server.MapPath( "11.xls" )
'同上理 打开excel文件
sql="select * from [mysheet$]"
'11.xls中的表格mysheet 这个是打开该表格的方法
set rs=conn.execute(sql)
'取得记录集对象
这样我们就可以通过记录集来读取excel中的文件,同时也可以把从word/access等其他格式的文件中读取的数据insert或者update到excel中.
例子:
on error resume next
'因为很多数据是不严整的 所以需要跳过错误
dim conn,rs,sql,conn0,rs0,sql0
set conn0=server.createobject("adodb.connection")
conn0.open "DBQ="&Server.Mappath("#access.mdb")&";Driver={Microsoft Access Driver (*.mdb)};"
'我们都很熟悉的access链接 更好的是使用oledb
Set conn = Server.CreateObject("adodb.connection")
conn.open "Driver={Microsoft Excel Driver (*.xls)};" & "DBQ=" & Server.MapPath( "11.xls" )
'同上理 打开excel文件
sql="select * from [Sheet1$]"
set rs=conn.execute(sql)
'取得记录集对象
dim i
i=0
'我使用的excel文件中存放的是一些植物信息
sql0="select * from [Tb_plant]"
set rs0=server.createobject("adodb.recordset")
rs0.open sql0,conn0,3,3
do while not rs.eof
if rs("中文名")<>rs("拉丁名") then
'这里判断一下数据是不是多行公用一列
rs0.addnew
rs0("chinesename")=rs("中文名")
rs0("plantname")=rs("拉丁名")
rs0("classification")=rs("中文科名")
Rs.movenext
rs0("description")=rs("中文名") '显然下一列就是备注字段了
rs0.update
i=i+1
end if
'对于植物而言 仅有唯一的中文名和拉丁名 所以在设置access库的时候 字段不允许重复 这里需要导入不必要的数据 有些是重复的 程序这里会报错
if err then err.clear
rs.movenext
loop
rs.close
rs0.close
'.........就是关闭对象
Response.Write i&"个植物信息写入成功!"
需要特别小心的是,excel可以多列对应一行,比如我们有字段名a,b,c,它们可以在第5行公用同一个数据值.这个时候rs("a")=rs("b")=rs("c"),它们都可以取得对应的数据.