【问题标题】:Is it possible to check via VBA if file exist on a sharepoint site?是否可以通过 VBA 检查共享点站点上是否存在文件?
【发布时间】:2012-11-09 17:36:03
【问题描述】:

我正在尝试编写一个 Excel (2010) 宏,它在某些时候必须确认公司共享点网站上某个文件 (doc/pdf) 的存在。 该文件可通过 Internet Explorer 访问(所有权限均授予用户)。 我有该文件的直接链接。 我不需要打开它,只需检查它是否在那里。

如果这是一个本地文件,我会使用 Dir() 检查文件是否存在。 但是,这不适用于 URI。

我尝试了一种基于 GET via objHttp 的方法,但我收到的唯一响应是一个网页,指出“我无权查看此页面”[in tag]。

这是否可行?

【问题讨论】:

  • 您可以直接访问的链接吗?即在浏览器中没有登录/保存登录?

标签: sharepoint vba excel hyperlink


【解决方案1】:

试一试:

Function checkFile(URLStr As String) As Boolean
    Dim oHttpRequest As Object
    Set oHttpRequest = New MSXML2.XMLHTTP60
    With oHttpRequest
        .Open "GET", URLStr, False, [Username], [Password]
        .setRequestHeader "Cache-Control", "no-cache"
        .setRequestHeader "Pragma", "no-cache"
        .setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
        .send
    End With
    If oHttpRequest.Status = 200 Then
        checkFile = True
    Else
        checkFile = False
    End If
End Function

URLStr 应该类似于“http://sharepoint/site/user.xlsx”。在 .Open 行中输入您的用户名/密码以将它们传递到站点,这应该适用于任何 URI(例如,我正在针对 .xlsx 文件对其进行测试)。我应该指出,在我的内部 SharePoint 网站上,我不需要传递 UN/PW 即可运行此功能,因此如果您最终遇到这种情况,只需从 .Open 调用中删除这些参数.此外,可能不需要所有标头内容,但我的请求中总是有它们,所以我把它们留在里面。

【讨论】:

    【解决方案2】:

    我不知道这对你有帮助吗?但我正在和你分享我的想法。 您可以为此使用 http 网络请求。如下例所示:

    public void CheckWebFileExist()
    
    {
    
    try
    
    {
    
        WebClient client = new WebClient();
    
        client.Credentials = CredentialCache.DefaultCredentials;
    
    
    
        // Create a request for the URL.         
    
        WebRequest request = WebRequest.Create("myAddress");
    
    
    
        // If required by the server, set the credentials.
    
        request.Credentials = CredentialCache.DefaultCredentials;
    
    
    
        // Get the response.
    
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    
    
    
        //check response status
    
        if (string.Compare(response.StatusDescription, "OK", true) == 0)
    
        {
    
            //URL exists so that means file exists
    
        }
    
        else
    
        {
    
            //URL does not exist so that means file does not exist
    
        }      
    }
    catch (Exception error)
    
    {
    
        //error catching
    
    }
    }
    

    让我知道这是否对您有帮助?

    【讨论】:

    • 那是C#代码,你可以了解逻辑或转换它。
    • 我试过了。它看起来很有希望,因为 WebClient() 在 C++/C# 和 VB(在 .NET 中)中可用。但显然它在 VB for Applications 中未被识别。无论如何感谢您的贡献。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    相关资源
    最近更新 更多