9

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

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

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

这是否可行?

4

2 回答 2

4

试一试:

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调用中删除这些参数。此外,所有标题内容可能都不是必需的,但我的请求中总是有它们,所以我把它们留在了里面。

于 2012-11-21T21:50:34.170 回答
-1

我不知道这对你有帮助吗?但我正在和你分享我的想法。您可以为此使用 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

}
}

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

于 2012-11-21T13:02:39.230 回答