注册 登录
编程论坛 ASP技术论坛

哪位高手帮我看下excel导入的代码哪里有问题

wenhao 发布于 2007-12-22 15:38, 1561 次点击
代码是这样的帮我看一下
<%dim aa
  aa=request.form("bbb")  '获取传递过来的值

  Dim   StrConnect,cc   
  Dim   objConn   
  Dim   rs   
  Dim   Sql   
  cc=0
  'Excel连接驱动
  aaa="provider=Microsoft.Jet.OLEDB.4.0; Data Source="&aa&";Extended Properties=Excel 8.0"
   

   set StrConnect=CreateObject("ADODB.Connection")
StrConnect.Open aaa


  Set   objConn=CreateObject("ADODB.Connection")
  
  objConn.Open   StrConnect   
   
  '注意   表名一定要以下边这种格试   "[表名$]"   书写   
  Set   rs = Server.CreateObject("ADODB.Recordset")     
  Sql="select   *   from   [Sheet1$]   "   
  rs.Open   Sql,StrConnect,2,2     
  IF     rs.Eof   And     Rs.Bof   Then   
  response.Write("<script>alert   ('没有资料可以导入!');history.go(-1)</script>")   
   
   
  else   
   
   
  Do   While   Not   rs.EOF
  '列出表内信息  
    response.write"excel数据为: <br>"
    response.write ""&rs(0)&"-"&rs(1)&"-"&rs(2)&""
response.write"<br>"
  set   rssql=server.CreateObject("adodb.recordset")
  '插入SQL2000里   
  rssql.Open   "select   *   from   School",conn,1,3   
  rssql.AddNew   
  if   rs(0)<>""   then   
  rssql(1)=rs(0)   
  end   if   
  if   rs(1)<>""   then   
  rssql(2)=rs(1)   
  end   if   
  if   rs(2)<>""   then   
  rssql(3)=rs(2)   
  end   if   
   
  rssql.Update
  cc=cc+1  
  Rs.MoveNext   
   
  Loop   
  end   if   
  response.Write   "<script   language=javascript>alert('资料导入成功!\n共有"&cc&"条数据导入');history.go(-1)</script>"
   
   
  %>
17 回复
#2
wenhao2007-12-22 15:40
第一条记录导入不进去
上面代码第一条记录导入不进去
其余的可以
#3
yms1232007-12-22 15:42
set StrConnect=CreateObject("ADODB.Connection")
StrConnect.Open aaa


  Set   objConn=CreateObject("ADODB.Connection")
  
  objConn.Open   StrConnect   
这里objConn.Open StrConnect
这里的objCon是ADODB.Connection 而StrConnect也是ADODB.Connection
这两个能做参数?
#4
wenhao2007-12-22 16:06
但改后还是出现这种问题啊
对,那块是有错误,
但改后还是出现这种问题啊
#5
yms1232007-12-22 16:31
rssql.Open   "select   *   from   School",conn,1,3   
Do   While   Not   rs.EOF
  '列出表内信息  
    response.write"excel数据为: <br>"
    response.write ""&rs(0)&"-"&rs(1)&"-"&rs(2)&""
response.write"<br>"
  set   rssql=server.CreateObject("adodb.recordset")
  '插入SQL2000里   
  
  rssql.AddNew   
  if   rs(0)<>""   then   
  rssql(1)=rs(0)   
  end   if   
  if   rs(1)<>""   then   
  rssql(2)=rs(1)   
  end   if   
  if   rs(2)<>""   then   
  rssql(3)=rs(2)   
  end   if   
  cc=cc+1  
  Rs.MoveNext   
 Loop
rssql.Update
不需要重复打开记录集的,重复打开与Update会影响程序运行速度的。
#6
wenhao2007-12-22 16:54
好的
rssql.Open   "select   *   from   School",conn,1,3   
Do   While   Not   rs.EOF
  '列出表内信息  
    response.write"excel数据为: <br>"
    response.write ""&rs(0)&"-"&rs(1)&"-"&rs(2)&""
response.write"<br>"
  set   rssql=server.CreateObject("adodb.recordset")
  '插入SQL2000里

这样能打开记录集吗
#7
wenhao2007-12-22 16:58
这样是不
rssql.Open   "select   *   from   School",conn,1,3   
Do   While   Not   rs.EOF
  '列出表内信息  
    response.write"excel数据为: <br>"
    response.write ""&rs(0)&"-"&rs(1)&"-"&rs(2)&""
response.write"<br>"
  set   rssql=server.CreateObject("adodb.recordset")
  '插入SQL2000里


是不应该把它 set   rssql=server.CreateObject("adodb.recordset")
放在sql语句上面啊
#8
yms1232007-12-22 17:00
set   rssql=server.CreateObject("adodb.recordset")
  '插入SQL2000里   
rssql.Open   "select   *   from   School",conn,1,3   
Do   While   Not   rs.EOF
  '列出表内信息  
    response.write"excel数据为: <br>"
    response.write ""&rs(0)&"-"&rs(1)&"-"&rs(2)&""
response.write"<br>"

  
  rssql.AddNew   
  if   rs(0)<>""   then   
  rssql(1)=rs(0)   
  end   if   
  if   rs(1)<>""   then   
  rssql(2)=rs(1)   
  end   if   
  if   rs(2)<>""   then   
  rssql(3)=rs(2)   
  end   if   
  cc=cc+1  
  Rs.MoveNext   
Loop
rssql.Update
创建语句也要放在最开头,用一个记录集添加就可以。
#9
随 缘2007-12-22 17:06
我也是用这个程序导入EXCEL,目前应该无问题,只是把rssql(1)=rs(0)改为rssql(0)=rs(0)   . 缺点是必须在本地导入,如果是在客户端就不成,另外,如果EXCEL记录里有数字、文字如下面:作为记录法正常导入。
姓名  成绩
李四  60
张三  100
即使在EXCEL中全面设为字符型,他也只能导入姓名这列,成绩就变为空值。要解决只能先导入姓名行再导入姓名入成绩,不知是什么原因。
#10
yms1232007-12-22 17:17
楼主的第一条数据是什么样子的,还有9楼的试试强制类型转换。
#11
随 缘2007-12-22 17:44
yms123版主,您好,有时导入记录出现空值主要是读入EXCEL时就为空值,即在RS记录集中RS(0)时为空值,如何强制转换?任何类型转为字符是什么函数?请版主详细指点,谢谢。
#12
yms1232007-12-22 17:46
在转换时加IF判断就可以
IF Rs(0)="" Then
End IF
CStr()函数可以将任何类型的变量转为字符串。
#13
随 缘2007-12-22 19:24
不好意思,版主,我还是有点不明白,因为在将EXCEL读入集时时就将应为非空的值作为空值处理了,当在RS(0)判断为空时,已无法值得正确值了。如何解决读入时确保无论EXCEL记录中为何类型时均转为字符型?期待您的指引,谢谢。
#14
yms1232007-12-22 19:27
代码是怎么写的?
#15
随 缘2007-12-22 19:53
因为我对这也是不太清楚,应该是这句,也可以先打开EXCEL再读,不过那样比较麻烦。
Set   rs = Server.CreateObject("ADODB.Recordset")     
  Sql="select   *   from   [Sheet1$]   "   
  rs.Open   Sql,StrConnect,2,2
#16
yms1232007-12-22 22:17
IF IsEmpty(Rs(0)) Then
End IF
这样判断呢?
如果说Excel打开时处理了非空值(把非空值替换为别的字符)的话,可以把那个字符显示出来。
然后IF时判断是否等于哪个字符不就行了?
#17
wenhao2007-12-23 08:33
excel建表有什么特殊的原则吗
我添加的都是数字啊
还有最一条是字符的,记录导入了,但是空的
我对excel不熟
#18
wenhao2007-12-23 08:51
excel建表有什么规则吗
我对它不太熟
我的记录除了最后一条是字符的其余的都是数字
第一条导不进去,最后一导入后显示空值
1