ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 15640|回复: 10

[求助] 如何达到相当于关闭excel来清除缓存的效果?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-11-19 22:33 | 显示全部楼层 |阅读模式
本帖最后由 renahu 于 2014-11-20 07:43 编辑

我发现个问题,如果我打开文件后,把网打开或断开,当点击登录时都能迅速而正确地判断网络是否有问题,但是如果我开始抓网后,比如抓1到200页,然后中间断开网,这时就按照我设置的超时退出处理,我这里设的10秒没抓到就放弃,进度条继续走,完成后提示部分抓取成功,现在的问题是,如果再点击登录按钮,这时就会假死一段时间才能判断出网断了,而且就算我把网重新连上,假死一阵后也是提示网络故障。我试了网址后加随机数的方法和加 If-Modified-Since 头的方法都不灵,除非重启excel后,才能迅速而正确地判断目前的网络是断开了还是连上了。
附件 :http://club.excelhome.net/thread-1162676-14-1.html    137楼

TA的精华主题

TA的得分主题

发表于 2014-11-20 10:56 | 显示全部楼层
        If http.Status <> 200 Then
            MsgBox "readyState: " & http.readyState & vbCrLf & "Status: " & http.Status
            Set http = Nothing
            MsgBox "请检查网络状况!", 0 + 64, "网络故障!"
            ExitAll = True
            Exit Sub
        End If

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-20 13:11 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
coby001 发表于 2014-11-20 10:56
If http.Status  200 Then
            MsgBox "readyState: " & http.readyState & vbCrLf & "St ...

关键是send之后半天没响应谢老师,我在外面,回去再试

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-20 23:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
coby001 发表于 2014-11-20 10:56
If http.Status  200 Then
            MsgBox "readyState: " & http.readyState & vbCrLf & "St ...

老师,这只是加了个msgbox,抓取一半后掐断网,等完成后,点击登录,运行到send,仍然假死,过一阵后才判断出.Status <> 200

TA的精华主题

TA的得分主题

发表于 2014-11-20 23:08 | 显示全部楼层
msgbox 提示你看网络状态

你自己看Fiddle 监控联网过程,应该能看出原因~~

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-20 23:13 | 显示全部楼层
coby001 发表于 2014-11-20 23:08
msgbox 提示你看网络状态

你自己看Fiddle 监控联网过程,应该能看出原因~~

用fiddler监控我还真不知道怎么做,我只是知道关了excel重新再打开可以解决此问题,所以判断还是缓存的问题,但常见的删除缓存的方法对此无效

TA的精华主题

TA的得分主题

发表于 2014-11-21 10:09 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
很多时候跟缓存无关。楼主别再纠结缓存问题。
为了楼主少走冤枉路,提醒一下: :
1) 关Excel,就是关闭xmlhttp对象。
2) post 不会从缓存读取。
3) 建议楼主看一下协议里面的response . status, readystate 等响应代码和理解代码的含义。比如301, 407等

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-21 12:10 | 显示全部楼层
kangatang 发表于 2014-11-21 10:09
很多时候跟缓存无关。楼主别再纠结缓存问题。
为了楼主少走冤枉路,提醒一下: :
1) 关Excel,就是关闭xml ...

多谢老师提醒,您说“别再纠结缓存问题” ,又提醒“看一下协议里面的response . status, readystate 等响应代码和理解代码的含义”,老师的意思是撇开缓存问题,从相应代码着手,也就是说这个问题还是可解的是吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-21 15:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
kangatang 发表于 2014-11-21 10:09
很多时候跟缓存无关。楼主别再纠结缓存问题。
为了楼主少走冤枉路,提醒一下: :
1) 关Excel,就是关闭xml ...

发现这个很形象:

readyState表示XMLHttpRequest对象的处理状态:
0:XMLHttpRequest对象还没有完成初始化。(准备司机、车、货物)
1:XMLHttpRequest对象开始发送请求。(需要送十车货物,当前正在送第几车)
2:XMLHttpRequest对象的请求发送完成。(十车货送完毕)
3:XMLHttpRequest对象开始读取服务器的响应。(准备把这十车加工的货拉回来,当前第几车)
4:XMLHttpRequest对象读取服务器响应结束。(十车货全部拉回完毕)

status状态:
1xx:信息响应类,表示接收到请求并且继续处理。(所有拉去的货,工厂还没有加工完毕)  
2xx:处理成功响应类,表示动作被成功接收、理解和接受。。(所有拉去的货工厂全部加工完毕)  
3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理 。(所有拉去的货,工厂设备不够,让其他工厂帮忙加工)  
4xx:客户端错误,客户请求包含语法错误或者是不能正确执行 。(这十车货有质量问题,工厂不能正常加工)
5xx:服务端错误,服务器不能正确执行一个正确的请求。(工厂在加工到一半过程中断电,不能继续加工)

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-21 17:55 | 显示全部楼层
kangatang 发表于 2014-11-21 10:09
很多时候跟缓存无关。楼主别再纠结缓存问题。
为了楼主少走冤枉路,提醒一下: :
1) 关Excel,就是关闭xml ...
  1. Sub loginstatus()             '查登陆状态
  2.     On Error GoTo msg
  3.     Dim ul$, strText$, http
  4.         ul = "http://www.apabi.com/cdyxy/?pid=usp.catsearch"
  5.         ul = ul & "&db=dlib"
  6.         ul = ul & "&dt=EBook"
  7.         ul = ul & "&cult=CN"
  8.         ul = ul & "&of=PublishDate"
  9.         ul = ul & "&om=desc"
  10.         ul = ul & "&ct=CYFL2011%24%24"
  11.         ul = ul & "&cl=0"                                    '类别级次,0~2
  12.         ul = ul & "&il=0"                                    '是否有下级,0有,1无
  13.         ul = ul & "&sct=1"                                   '是否只显示可整本阅读的书,4是全部
  14.         ul = ul & "&pg=1"                                    '页数
  15. '        ul = ul & "&t=" & Int(Rnd() * 10 ^ 8)                '缓存中不保留
  16.     Set http = CreateObject("MSXML2.XMLHTTP")
  17.     With http
  18.         .Open "GET", ul, False
  19. '        .setRequestHeader "Cache-Control", "no-cache"
  20.         .setRequestHeader "If-Modified-Since", "0"
  21.         .send
  22.         strText = .responsetext
  23.         If Split(Split(strText, "<title>")(1), "<")(0) = "中华数字书苑-用户登录" Then
  24.             instatus = False
  25.         ElseIf Split(Split(strText, "<title>")(1), "<")(0) = "中华数字书苑-中华数字文明精粹" Then
  26.             instatus = True
  27.         End If
  28.         ExitAll = False
  29.     End With
  30.     Exit Sub
  31. msg:
  32.     If Err.Number = -2146697211 Then
  33.         MsgBox "请检查网络状况!", 0 + 64, "网络故障!"
  34.         ExitAll = True
  35.         Exit Sub
  36.     End If
  37. End Sub
复制代码
我是在网抓的过程中间故意断网,然后执行这段代码查看登陆状态,执行到send就近十分钟不响应。如果打开文件直接执行这段代码就能很快判断网络状况。
老师我看到网上您提到的两句代码:
.setRequestHeader "Cache-Control", "no-cache"
.setRequestHeader "If-Modified-Since", "0"
但都send后的不响应都不起作用。而status和readystate似乎只有在send相应完后才能看到,不知道还有什么方法
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-9-29 06:08 , Processed in 0.042624 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表