无法使用Excel VBA从Sharepoint 2013打开下载的Excel文件

时间:2014-12-17 10:04:07

标签: excel vba sharepoint xmlhttprequest adodb

我尝试了以下代码从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。

有人可以帮助解决文件未打开的原因吗?

1 个答案:

答案 0 :(得分:0)

这不是一个完整的答案,但更像是评论/建议,因为我没有足够的声誉来发表评论。

在GET查询中设置内容类型标头似乎没有任何区别。我们需要检查服务器发送的WinHttpReq.getResponseHeader("Content-Type"),在这种情况下似乎是Text / Html; UTF-8。

如果您将myURL变量中使用的网址粘贴到浏览器,您是否将"文件另存为"对话框?

如果您使用Fiddler Web Debugger可以在作曲家中创建请求并检查响应以微调您的要求并查看是否有任何其他标题(如Cookie,身份验证等),则可以更好地分析您的请求和响应)也需要下载文件。在这种情况下,由于某些身份验证问题而不是excel文件,您可能会返回登录页面(html)。

打开使用Notepad.exe保存的DestFile,查看它是否真的是XLSX文件(以字符PK开头)或HTML或其他文本文件。