使用VBA从Sharepoint下载excel

时间:2017-12-13 13:17:03

标签: sharepoint

我有一个excel文件,打开时需要下载并打开存储在Sharepoint中的最新版本的添加。我有这个代码下载添加,将其保存在特定位置(strSavePath)并尝试打开它。

Function funLoadRomeFiles(strURL As String, strSavePath As String)

Dim objConnection As Object
Dim objStream As Object

    Set objConnection = CreateObject("MSXML2.ServerXMLHTTP.6.0")

    On Error GoTo ExitConnect
    objConnection.Open "GET", strURL, False
    objConnection.send
    strURL = objConnection.responseBody
    If objConnection.Status = 200 Then
        Set objStream = CreateObject("ADODB.Stream")
        objStream.Open
        objStream.Type = 1
        objStream.Write objConnection.responseBody
        objStream.SaveToFile strSavePath, 2
        objStream.Close
    End If
ExitConnect:
    On Error GoTo 0
    Shell "C:\WINDOWS\explorer.exe """ & strSavePath & "", vbHide
End Function

但是我在倒数第二行遇到错误。错误是:Excel无法打开文件“文件名”,因为文件格式或文件扩展名无效[...]“。下载的文件已损坏,无法手动打开。当我下载并手动打开时,它有效。

文件大小为30.9 kb,但执行代码会将其下载为51 kb文件。我尝试使用此代码下载其他文件,它们也已损坏,无论实际文件大小为51 kb。有没有办法更改代码,以便文件不会被破坏或任何其他方式这样做?

更新:下载的文件似乎是一个html文件,即使它的名称仍以.xlam

结尾

此外,我尝试使用以“filename.xlam”结尾的链接和以“filename.xlam?csf = 1& e = b5f7991021ab45c1833229210f3ce810”结尾的链接,两者都给出了相同的结果,当您复制链接到chrome都会立即下载正确的文件

2 个答案:

答案 0 :(得分:1)

我有一次类似的问题。

我的问题是,该sharepoint不允许某种文件类型。所以我不得不做一个解决方法。因此,您可以尝试压缩您的 * .xlam 文件并将其放在Sharepoint上。然后使用您已有的代码下载它。然后你只需解压缩以下代码。

Sub Unzip1()
    Dim FSO As Object
    Dim oApp As Object
    Dim Fname As Variant
    Dim FileNameFolder As Variant
    Dim DefPath As String
    Dim strDate As String

    Fname = strSavePath' I assume that this is the Path to the File you Downloaded
    If Fname = False Then
        'Do nothing
    Else
        'Root folder for the new folder.

        DefPath = Application.DefaultFilePath 'Or Change it to the Path you want to unzip the Files
        If Right(DefPath, 1) <> "\" Then
            DefPath = DefPath & "\"
        End If

        'Create the folder name
        strDate = Format(Now, " dd-mm-yy h-mm-ss")
        FileNameFolder = DefPath & "MyUnzipFolder " & strDate & "\"

        'Make the normal folder in DefPath
        MkDir FileNameFolder

        'Extract the files into the newly created folder
        Set oApp = CreateObject("Shell.Application")

        oApp.Namespace(FileNameFolder).CopyHere oApp.Namespace(Fname).items

        'If you want to extract only one file you can use this:
        'oApp.Namespace(FileNameFolder).CopyHere _
         'oApp.Namespace(Fname).items.Item("test.txt")

        MsgBox "You find the files here: " & FileNameFolder

        On Error Resume Next
        Set FSO = CreateObject("scripting.filesystemobject")
        FSO.deletefolder Environ("Temp") & "\Temporary Directory*", True
    End If
End Sub

之后你刚刚执行了扩展程序。 我希望这可以帮到你。

答案 1 :(得分:0)

我找不到下载到加载项的方法,尝试了多种不同的方式,并得出结论是有som授权错误或由我正在使用的SharePoint版本引起的其他问题。我发现符合我需求的解决方案是使用以下代码直接从SharePoint打开加载项:

On Error Resume Next
ActiveWorkbook.FollowHyperlink Address:="strUrl"
On Error GoTo 0