如何使用VBA使用Microsoft XMLHTTP获取文件扩展名

时间:2014-07-25 05:32:02

标签: excel vba access-vba

我正在使用以下简单代码从互联网下载并保存一些文件。我正在连接的服务器有时生成excel文件而另一些文本文件,我想知道是否有任何可能的方法来弄清楚文件扩展名是什么,以便可以使用适当的扩展名下载?现在我将所有文件保存为txt文件,如果文件返回excel文件,则下载的文件将无用(因为它保存为txt文件,我必须手动更改扩展名)。谢谢你们

Dim myURL As String
Dim WinHttpReq As Object
Dim FP As String

myURL = "SAMPLE URL"

Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
WinHttpReq.Open "GET", myURL, False
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 (FP & "\" & C1 & "-" & C2 & ".txt"), 2
    oStream.Close
End If

End Sub

2 个答案:

答案 0 :(得分:1)

在WinHttpReq.Open" GET",myUrl,false之前,您可以尝试打开标题并在下载之前查看文件的mime类型:

WinHttpReq.Open "HEAD", myUrl, false
WinHttpReq.Send
MyHeader = WinHttpReq.getAllResponseHeaders()
' Scan MyHeader here to find your file mime type ...

答案 1 :(得分:1)

感谢kiks73,我找到了处理这个问题的方法,但我想添加一小部分,使用

MyHeader = WinHttpReq.getAllResponseHeaders()

会给你类似的东西

  

“服务器:Microsoft-IIS / 5.0   日期:2014年7月29日星期二18:05:44 GMT   X-Powered-By:ASP.NET   Content-Disposition:FileName = 11120166.Txt   Content-Type:application / octet-stream   内容长度:152   含量:

这可能有点难以阅读和分析,所以我找到了另一种方法来获取文件名和扩展名:

MyHeader = WinHttpReq.getResponseHeader("Content-Disposition")
这样你就可以抛弃所有的垃圾,只得到你想要的东西。但是:在我的情况下,我必须一次下载300到8000个文件(所有相同的类型,但类型可能会从一个会话更改为另一个会话)并且每次尝试拉取扩展名似乎很荒谬,并且它使我的代码崩溃,所以你可能只想拉一次扩展。 再次感谢kiks73帮助我