【问题标题】:Excel VBA how to read in text file from web (not cached)?Excel VBA 如何从 Web 读取文本文件(未缓存)?
【发布时间】:2017-11-29 02:19:42
【问题描述】:

我一直在使用以下代码从网上读取文本文件:

'import the text file into a string
Function DownloadTextFile(URL As String) As String
On Error GoTo Err_GetFromWebpage

Dim objWeb As Object
Dim strXML As String

 ' Instantiate an instance of the web object
Set objWeb = CreateObject("Microsoft.XMLHTTP")

 ' Pass the URL to the web object, and send the request
objWeb.Open "GET", URL, False
objWeb.send

 ' Look at the HTML string returned
strXML = objWeb.responseText

DownloadTextFile = strXML


End_GetFromWebpage:
 ' Clean up after ourselves!
Set objWeb = Nothing
Exit Function

Err_GetFromWebpage:
 ' Just in case there's an error!
MsgBox Err.Description & " (" & Err.Number & ")"
Resume End_GetFromWebpage

End Function

第一次运行良好,但是当我对文本文件进行更改时,它并没有反映在返回的字符串中。就好像 Excel 正在缓存文件一样。我能做些什么来解决这个问题?谢谢!

【问题讨论】:

    标签: excel vba http caching reload


    【解决方案1】:

    除了按照@dee 的建议设置请求标头外,我还将“Microsoft.XMLHTTP”更改为“Msxml2.ServerXMLHTTP”,现在它可以工作了!这是最终代码:

    'import the text file into a string
    Function DownloadTextFile(URL As String) As String
        On Error GoTo Err_GetFromWebpage
    
        Dim objWeb As Object
        Dim strXML As String
    
         ' Instantiate an instance of the web object
        Set objWeb = CreateObject("Msxml2.ServerXMLHTTP")
    
         ' Pass the URL to the web object
        objWeb.Open "GET", URL, False
    
        'don't cache the file
        objWeb.setRequestHeader "Content-Type", "text/xml"
        objWeb.setRequestHeader "Cache-Control", "no-cache"
        objWeb.setRequestHeader "Pragma", "no-cache"
    
        'send the request
        objWeb.send
    
         ' Look at the HTML string returned
        strXML = objWeb.responseText
    
        DownloadTextFile = strXML
    
        End_GetFromWebpage:
         ' Clean up after ourselves!
        Set objWeb = Nothing
        Exit Function
    
        Err_GetFromWebpage:
         ' Just in case there's an error!
        MsgBox Err.Description & " (" & Err.Number & ")"
        Resume End_GetFromWebpage 
    
    End Function
    

    【讨论】:

      【解决方案2】:

      如果没有URL,则无法对其进行测试,但是您是否尝试过将setRequestHeaderno-cache 一起使用?

      例子:

      objWeb.setRequestHeader "Content-Type", "text/xml"
      objWeb.setRequestHeader "Cache-Control", "no-cache"
      objWeb.setRequestHeader "Pragma", "no-cache"
      

      【讨论】:

      • 还是同样的问题。网址是 whiteboxfitness.com/sc/participation.txt。
      • 除此之外,我还把“Microsoft.XMLHTTP”改成了“Msxml2.ServerXMLHTTP”,现在可以了!
      猜你喜欢
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      • 2019-09-19
      • 1970-01-01
      • 2012-08-01
      • 1970-01-01
      相关资源
      最近更新 更多