Получить содержимое папки sharepoint с помощью Excel VBA - PullRequest
20 голосов
/ 28 августа 2009

Обычно я использую этот фрагмент кода для получения содержимого папки в 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

РЕДАКТИРОВАТЬ (после хорошего комментария от Шахкалпеш):

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

Ответы [ 8 ]

14 голосов
/ 30 октября 2009

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

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

  • объектная модель хоста сценариев Windows (wshom.ocx) - для WshNetwork
  • Microsoft Scripting Runtime (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
12 голосов
/ 28 августа 2009

Используйте путь 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. Скопируйте путь, который вы видите там, и используйте его.

10 голосов
/ 12 сентября 2013

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

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

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

myFilePath = replace(myFilePath, " ", "%20")
2 голосов
/ 02 мая 2013

Я немного поэкспериментировал с этой проблемой и нашел очень простое двухстрочное решение, просто заменив 'http' и все косые черты, подобные этой:

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

Это может работать не у всех, но у меня работает

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

myFilePath = replace(myFilePath, "https:", "")
2 голосов
/ 28 октября 2009

ИМХО, самый крутой способ - использовать WebDAV (без сетевой папки, так как это часто не разрешается). Это может быть достигнуто с помощью объектов данных ActiveX, как изложено в этой превосходной статье отличной статье (код можно использовать непосредственно в 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

1 голос
/ 10 февраля 2013

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

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

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

0 голосов
/ 16 января 2012

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

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

address in explorer

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

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

Настройка подключения для передачи данных к листу Excel

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

connection tab

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

0 голосов
/ 31 августа 2009

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

...