asp 读EXECL很慢

露珠111 2009-09-15 09:23:30
Set Cn=Server.CreateObject("Adodb.Connection")
cn.provider="Microsoft jet OLEDB.40"
cn.ConnectionString="Data source="filename";"&_"Extened Properties=Execl 8.0;"
如何判断下面这句代码正确执行呢?就是如果要打开的EXECL文件已经打开了,怎么判断呢?
cn.open

set rs=Server.CreateObject("ADODB.recordset")
rs.open"select * from {sheet1&]",cn,1,1

加了下面这个判断后,程序很慢,而且有错,什么原因呢?
if(rs.field("Name")<>"" then

end if


请教高手指点?
...全文
82 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
露珠111 2009-09-16
  • 打赏
  • 举报
回复
zxdldh007的办法好,现在已经解决。
还有下面这个问题,请高手帮帮忙。兄弟先谢谢了
if rs.field("Name")&"" <>"" then ' 这句话主要是判断主键不能为空,
...
end if

不加这句话所有EXECL行都可以导入到数据库中,而且很快,加了这句判断就很慢,大概要5分钟才能反映过来。
凡夫与俗子 2009-09-16
  • 打赏
  • 举报
回复
额..是excel。。。再改改。。发现你的excel也写错了。。。
<%
'on error resume next
'filename="路径" '这个你确定你存在文件和赋值给变量了吗
Set Cn=Server.CreateObject("Adodb.Connection")
cn.provider="Microsoft.jet.OLEDB.4.0"
cn.ConnectionString="Data source="& filename &";Extened Properties=Excel 8.0;"
cn.open
if cn.errors.count>0 then
response.Write "打开Exel出错!"
else
response.Write "打开Exel成功!"
end if

set rs=Server.CreateObject("ADODB.recordset")
rs.open "select * from {sheet1&]",cn,1,1


if rs.field("Name")&"" <>"" then ' &""是排除null,即使数据null也不会出错
..
end if
%>
凡夫与俗子 2009-09-16
  • 打赏
  • 举报
回复
呵呵,没弄过Exel的程序,看你的代码稍微改了下,试试下面的:
<%
Set Cn=Server.CreateObject("Adodb.Connection")
cn.provider="Microsoft jet OLEDB.40"
cn.ConnectionString="Data source="&filename&";Extened Properties=Execl 8.0;"
cn.open
if cn.errors.count>0 then
response.Write "打开Exel出错!"
else
response.Write "打开Exel成功!"
end if

set rs=Server.CreateObject("ADODB.recordset")
rs.open "select * from {sheet1&]",cn,1,1


if rs.field("Name")&"" <>"" then ' &""是排除null,即使数据null也不会出错
...
end if
%>
xxwood 2009-09-16
  • 打赏
  • 举报
回复
不加就不慢吗?
试试 if isnull(rs.field("name")) then
露珠111 2009-09-16
  • 打赏
  • 举报
回复
搞定了,是end if 放在读数据库循环外面了,拿到里面就好了,谢谢
凡夫与俗子 2009-09-16
  • 打赏
  • 举报
回复
<%
'查了些资料,请教了一些朋友,写了下面的,注释是我根据朋友说的写的,不知道对不对,你自己查资料看看核对。
set xlApp = server.CreateObject("Excel.Application") '创建记录集---可能需要设置权限:在命令行键入“DCOMCNFG”,则进入DCOM组件配置界面,选择Microsoft Excel后点击属性按钮,将三个单选项一律选择自定义,编辑中将Everyone加入所有权限。保存完毕后重新启动服务器
strsource = server.MapPath(filename) '获取你前面的xls文件路径
set xlbook = xlApp.WorkBooks.Open(strsource) '打开Excel文件
set xlsheet = xlbook.Worksheets(1) '打开记录里的第几个sheet

'开始循环读取
i = 1
response.write " <table>"
while xlsheet.cells(i,1) <> "" '你要判断是否name为空,可以用这个 if xlsheet.cells(i,1)<>"" or not isNull(xlsheet.cells(i,1)) then

'下面开始你需要的操作

response.write " <tr>"
response.write " <td>" & xlsheet.Cells(i,1) & " </td>"
response.write " <td>" & xlsheet.Cells(i,2) & " </td>"
response.write " <td>" & xlsheet.Cells(i,3) & " </td>"
response.write " <tr>"
i = i + 1

wend

response.write " </table>"
set xlsheet = nothing '道听途说:记得清空,不然进程里会很多xls的进程。
set xlbook = nothing '道听途说:记得清空,不然进程里会很多xls的进程。
xlApp.quit '道听途说:记得清空,不然进程里会很多xls的进程。
%>
凡夫与俗子 2009-09-16
  • 打赏
  • 举报
回复
想了想,可能是要判断每个记录的name是否为空,而假如你的记录很多的话,那是很慢。
给你个思路:先读取name到一个数组,然后判断数组,这样估计会快很多。
凡夫与俗子 2009-09-16
  • 打赏
  • 举报
回复
if rs.field("Name")&"" <>"" then ' 这句话主要是判断主键不能为空,
...
end if

我也不知道原因。你把if end if内的代码贴出来看下。

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧