繁体   English   中英

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

[英]Not able to open downloaded Excel file from Sharepoint 2013 using Excel VBA

我已尝试使用以下代码从 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。 它不显示内容处置。

有人可以帮忙解释为什么文件没有打开吗?

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

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

如果将 myURL 变量中使用的 URL 复制粘贴到浏览器,是否会出现“文件另存为”对话框?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM