2015-09-21 58 views
1

我有一个SharePoint测试网站(Azure SharePoint场),其中包含几个图像文件和一些文档模板。我想将图像下载到我的本地驱动器。我期望循环浏览URL列表,例如http://mySharePointSite/Sites/Images/Image01.png并依次下载。我已经尝试了URLDownloadToFile,如果我把这些图片放在一个普通的网站上,它会很好用,但是我无法通过这种方法让Windows安全通过。VBA/.Net从密码保护的网站通过Windows安全下载文件

我已经去创建一个InternetExplorer.Application对象(后期绑定),可以查看我的图像,但无法下载它们。正在尝试ieApp.ExecWB,但是这会抛出一个Run Time Error that seems insurmountable。我也试过WinHTTP.WinHTTPrequest.5.1(StackOverflow 22051960),但是,虽然看起来很有希望,但它返回了一个短字符串“???????”而不是图像。

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

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

我可以粘贴代码,但我真的不知道我有什么值得分享。如果这在VBA中不可能或不可靠,那么使用VB.Net(我下一个最陡峭的学习曲线)是可能的?

回答

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