Получить содержимое папки sharepoint с помощью Excel VBA

Обычно я использую этот фрагмент кода для извлечения содержимого папки в VBA. Но это не работает в случае sharepoint. Как я могу сделать?

Dim folder As folder
Dim f As File
Dim fs As New FileSystemObject

Set folder = fs.GetFolder("//sharepoint.address/path/to/folder")

For Each f In folder.Files
    'Do something
Next f

EDIT (после хорошего комментария shahkalpesh):

Я могу получить доступ к sharepoint, если я введу адрес в Проводнике Windows. Доступ к sharepoint требует аутентификации, но он прозрачен, потому что он зависит от входа Windows.

Ответы

Ответ 1

Единственный способ, которым я нашел работу с файлами в SharePoint, имея права на сервер, - сопоставить папку WebDAV с буквой диска. Вот пример реализации.

Добавьте ссылки на следующие библиотеки ActiveX в VBA:

  • Windows Script Модель объекта хоста (wshom.ocx) - для WshNetwork
  • Время выполнения сценариев Microsoft (scrrun.dll) - для FileSystemObject

Создайте новый модуль класса, назовите его DriveMapper и добавьте следующий код:

Option Explicit

Private oMappedDrive As Scripting.Drive
Private oFSO As New Scripting.FileSystemObject
Private oNetwork As New WshNetwork

Private Sub Class_Terminate()
  UnmapDrive
End Sub

Public Function MapDrive(NetworkPath As String) As Scripting.Folder
  Dim DriveLetter As String, i As Integer

  UnmapDrive

  For i = Asc("Z") To Asc("A") Step -1
    DriveLetter = Chr(i)
    If Not oFSO.DriveExists(DriveLetter) Then
      oNetwork.MapNetworkDrive DriveLetter & ":", NetworkPath
      Set oMappedDrive = oFSO.GetDrive(DriveLetter)
      Set MapDrive = oMappedDrive.RootFolder
      Exit For
    End If
  Next i
End Function

Private Sub UnmapDrive()
  If Not oMappedDrive Is Nothing Then
    If oMappedDrive.IsReady Then
      oNetwork.RemoveNetworkDrive oMappedDrive.DriveLetter & ":"
    End If
    Set oMappedDrive = Nothing
  End If
End Sub

Затем вы можете реализовать его в своем коде:

Sub test()
  Dim dm As New DriveMapper
  Dim sharepointFolder As Scripting.Folder

  Set sharepointFolder = dm.MapDrive("http://your/sharepoint/path")

  Debug.Print sharepointFolder.Path
End Sub

Ответ 2

Используйте UNC-путь, а не HTTP. Этот код работает:

Public Sub ListFiles()
    Dim folder As folder
    Dim f As File
    Dim fs As New FileSystemObject
    Dim RowCtr As Integer

    RowCtr = 1
    Set folder = fs.GetFolder("\\SharePointServer\Path\MorePath\DocumentLibrary\Folder")
    For Each f In folder.Files
       Cells(RowCtr, 1).Value = f.Name
       RowCtr = RowCtr + 1
    Next f
End Sub

Чтобы получить путь UNC, перейдите в папку в библиотеке документов, откройте меню "Действия" и выберите "Открыть" в проводнике Windows. Скопируйте путь, который вы видите там, и используйте это.

Ответ 3

В дополнение к:

myFilePath = replace(myFilePath, "/", "\")
myFilePath = replace(myFilePath, "http:", "")

также заменить пробел:

myFilePath = replace(myFilePath, " ", "%20")

Ответ 4

ИМХО самый крутой путь - пройти через WebDAV (без сетевой папки, поскольку это часто не разрешено). Это может быть достигнуто с помощью объектов ActiveX Data Objects, изложенных в этой отличной статье отличной статьи (код можно использовать непосредственно в Excel, недавно использовала концепцию).

Надеюсь, это поможет!

http://blog.itwarlocks.com/2009/04/28/accessing-webdav-in-microsoft-word-visual-basic/

исходная ссылка мертва, но по крайней мере текстовое содержимое по-прежнему доступно на archive.org: http://web.archive.org/web/20091008034423/http://blog.itwarlocks.com/2009/04/28/accessing-webdav-in-microsoft-word-visual-basic

Ответ 5

Я потратил некоторое время на эту самую проблему - я пытался проверить файл, существовавший до его открытия.

В конце концов, я придумал решение с использованием XML и SOAP - используйте метод EnumerateFolder и вытащите ответ XML с содержимым папки.

Я написал об этом здесь.

Ответ 6

Отображение диска для sharepoint (также https)

Получение содержимого sharepoint работало для меня через сопоставленный диск, итератируя его как объект файловой системы; трюк заключается в том, как настроить отображение: from sharepoint, open as explorer Затем скопируйте путь (строка с http *) (см. Ниже)

address in explorer

Используйте этот путь в драйвере карты из проводника или команды (т.е. net use N: https:://thepathyoujustcopied) Примечание: https работает нормально с windows7/8, а не с XP.

Это может сработать для вас, но я предпочитаю другой подход, поскольку буквы дисков разные на каждом компьютере. Хитрость здесь заключается в том, чтобы начать с sharepoint (а не из VBA script доступа к sharepoint в качестве веб-сервера).

Настроить соединение с данными для листа excel

  • в sharepoint, перейдите к представлению, которое вы хотите отслеживать.
  • экспорт в excel (в 2010 году: инструменты библиотеки, libarry | экспорт в Excel) export to excel
  • При просмотре этого Excel вы найдете настройку источника данных (вкладка: данные, соединения, свойства, определение).

connection tab

Вы можете включить этот запрос в vba или сохранить ссылку на базу данных в своей речевой таблице, итерации по таблице VBA. Обратите внимание: на изображении выше не отображается фактическое соединение с базой данных (текст команды), в котором рассказывается, как получить доступ к моей sharepoint.

Ответ 7

Я немного испортил эту проблему и нашел очень простое решение с двумя строками, просто заменив "http" и все эти косые черты следующим образом:

myFilePath = replace(myFilePath, "/", "\")
myFilePath = replace(myFilePath, "http:", "")

Возможно, это не сработает для всех, но это сработало для меня.

Если вы используете безопасный сайт (или хотите обслуживать оба), вы можете добавить следующую строку:

myFilePath = replace(myFilePath, "https:", "")

Ответ 8

Попробуйте сопоставить библиотеку sharepoint с буквой диска в окнах. Затем выберите диск и путь в вашем коде.