VBA / .Net通过Windows安全性从受密码保护的网站下载文件

时间:2015-09-21 14:24:57

标签: excel vba excel-vba azure sharepoint

我有一个SharePoint测试网站(Azure SharePoint场),其中包含多个图像文件和一些文档模板。我想将图像下载到我的本地驱动器。我期望循环浏览一个URL列表,例如http://mySharePointSite/Sites/Images/Image01.png并依次下载每个。我已经尝试过URLDownloadToFile,如果我将这些图像放在常规网站上,但是我无法通过这种方法通过Windows安全性。

我开始创建一个InternetExplorer.Application对象(后期绑定)并可以查看我的图像,但无法下载它们。正在尝试ieApp.ExecWB但这会引发Run Time Error that seems insurmountable

我也尝试过WinHTTP.WinHTTPrequest.5.1(StackOverflow 22051960)但是,虽然看起来很有希望但它返回了一个短字符串“???????”而不是图像。

我真的希望有一个VBA解决方案,我想知道Impersonate User是否可以提供选项,或者是否有其他选项(不包括使用SendKeys)。可悲的是,我正在推动我的VBA知识的极限,并且可以真正使用一些指导。

是否可以从VBA的共享点下载?
如果是这样,我错过了一些简单的东西吗?

我可以粘贴代码,但实际上我不确定我有什么值得分享的东西。如果这在VBA中不可能或不可靠,那么V​​B.Net(我的下一个最陡峭的学习曲线)是可能的吗?

1 个答案:

答案 0 :(得分:2)

希望这有助于某人。我最终使用Visual Studio在VB.Net中创建了一个可以从VBA调用的DLL。 VB.Net dll需要引用microsoft.sharepoint.client

VBA代码需要引用生成的dll。

Imports Microsoft.SharePoint.Client

Module Module1
    Sub Main()
        Dim myContext As Microsoft.SharePoint.Client.ClientContext
        myContext = New ClientContext("http://TestSP-a.cloudapp.net/sites/Images/")

        Dim myCredentials As New System.Net.NetworkCredential
        '' I'm accessing a website from the outside so there
        '' are no credentials on my PC. If on the same NW I 
        '' assume I can use the line below instead of the 
        '' 3 lines that follow.
        'myCredentials = System.Net.CredentialCache.DefaultNetworkCredentials
        myCredentials.UserName = "UserNameForSharePoint"
        myCredentials.Password = "PassWordForSharePoint"
        myCredentials.Domain = ""   ' <-- Leave Blank


        Dim mySiteSP As New Uri("http://TestSP-a.cloudapp.net/sites/Images/Image1.png")
        Dim myTemp As String = "C:\temp\test.png"
        My.Computer.Network.DownloadFile(mySiteSP, myTemp, myCredentials, True, 600000I, False)


    End Sub

End Module