Excel VBA从互联网下载每5分钟更新一次的文本文件

2023-11-29

我想从此链接下载文件:https://www.hko.gov.hk/tide/marine/data/ALL.txt

该文件每 5 分钟自行更新一次。所以我继续创建一个 Excel VBA,然后使用调度程序每 5 分钟激活该 Excel 文件。然而不知何故,由于某种奇怪的原因,我下载到计算机中的文件并没有每 5 分钟更新一次。如果我使用chrome或IE打开,内容保持不变并且与文本文件不同。

下面是我从互联网上复制的一个非常典型的脚本。

Function DownloadFile(link As String)
Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
WinHttpReq.Open "GET", link, False, "username", "password"
WinHttpReq.send

myURL = WinHttpReq.responseBody
If WinHttpReq.Status = 200 Then
    Set oStream = CreateObject("ADODB.Stream")
    oStream.Open
    oStream.Type = 1
    oStream.Write WinHttpReq.responseBody
    oStream.SaveToFile ThisWorkbook.Path & "\raw\" & "temp.csv", 2 ' 1 = no overwrite, 2 = overwrite
    oStream.Close
End If

End Function

可能有缓存。请尝试以下添加 requestHeader 的操作,以尝试减轻潜在的缓存。另一种常见的替代方法,即在 URL 末尾添加随机数似乎不适用于该网站。

Option Explicit

Public Sub test()
    Dim i As Long
    For i = 1 To 3
        DownloadFile "https://www.hko.gov.hk/tide/marine/data/ALL.txt"
        Debug.Print Now
        Application.Wait Now + TimeSerial(0, 5, 0)
    Next
End Sub

Public Sub DownloadFile(ByVal link As String)
    Dim WinHttpReq As Object, oStream  As Object
    Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
    With WinHttpReq
        .Open "GET", link, False
        .setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
        .send

        Debug.Print StrConv(.responsebody, vbUnicode)

        If WinHttpReq.Status = 200 Then
            Set oStream = CreateObject("ADODB.Stream")
            oStream.Open
            oStream.Type = 1
            oStream.Write .responsebody
            oStream.SaveToFile ThisWorkbook.Path & "\raw\" & "temp.csv", 2 ' 1 = no overwrite, 2 = overwrite
            oStream.Close
        End If

    End With

End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Excel VBA从互联网下载每5分钟更新一次的文本文件 的相关文章

随机推荐