我尝试了以下代码从Sharepoint 2013下载单个Excel文件。
选项明确
Sub TxtStream()
Dim myURL As String, DestFile As String, myHeader As String
Dim Usr as string, Pwd as string
Dim oStream As Object
Usr="": Pwd=""
myURL = "https://Server.Name/teams/Forms/AllItems.aspx/MasterFile.xlsx"
DestFile = "C:\Test.xlsx"
Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("MSXML2.XMLHTTP")
'WinHttpReq.Open "HEAD", myURL, False, Usr, Pwd
'WinHttpReq.Send
'myHeader = WinHttpReq.getAllResponseHeaders()
'Debug.Print myHeader
'myHeader = WinHttpReq.getResponseHeader("Content-Disposition")
'Debug.Print myHeader
'myHeader = WinHttpReq.getResponseHeader("Content-Type")
'Debug.Print myHeader
WinHttpReq.Open "GET", myURL, False, Usr, Pwd
WinHttpReq.setRequestHeader "content-type", "application/octet-stream"
WinHttpReq.Send
myURL = WinHttpReq.responsebody
If WinHttpReq.Status = 200 Then
Set oStream = CreateObject("ADODB.Stream")
oStream.Type = 1
oStream.Open
oStream.Position = 0
oStream.Write WinHttpReq.responsebody
oStream.SaveToFile DestFile, 2
oStream.Close
End If
End Sub
下载确定,但是当我尝试在Excel 2010中打开它时,它会发出错误:
Excel无法打开文件Test.xlsx,因为文件格式或文件扩展名无效。验证文件是否已损坏,文件扩展名是否与文件格式匹配。
我检查了Content-Type,它显示为Text / Html; UTF-8。它没有显示Content-Disposition。
有人可以帮助解决文件未打开的原因吗?
答案 0 :(得分:0)
这不是一个完整的答案,但更像是评论/建议,因为我没有足够的声誉来发表评论。
在GET查询中设置内容类型标头似乎没有任何区别。我们需要检查服务器发送的WinHttpReq.getResponseHeader("Content-Type")
,在这种情况下似乎是Text / Html; UTF-8。
如果您将myURL变量中使用的网址粘贴到浏览器,您是否将"文件另存为"对话框?
如果您使用Fiddler Web Debugger可以在作曲家中创建请求并检查响应以微调您的要求并查看是否有任何其他标题(如Cookie,身份验证等),则可以更好地分析您的请求和响应)也需要下载文件。在这种情况下,由于某些身份验证问题而不是excel文件,您可能会返回登录页面(html)。
打开使用Notepad.exe保存的DestFile,查看它是否真的是XLSX文件(以字符PK开头)或HTML或其他文本文件。