Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: afewccОтветов: 9

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

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

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

  • Можете ли вы перейти к папке sharepoint с помощью проводника Windows? shahkalpeshp 28.08.2009
  • Да ! Похоже на обычную сетевую папку. afewcc 28.08.2009

sharepointexcelvba

Ответы

Ответ 1 · рейтинг 17 · Chris Hayes

Единственный способ, который я нашел для работы с файлами в 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

Ответ 2 · рейтинг 15 · Chris Latta

Используйте путь 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 · рейтинг 10 · Eileen

В добавление к:

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

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

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

Ответ 4 · рейтинг 2 · James Garratt

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

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

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

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

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

Ответ 5 · рейтинг 2 · BigD

ИМХО, самый крутой способ - через 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

Ответ 6 · рейтинг 1 · Steven C. Britton

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

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

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

Ответ 7 · рейтинг 1 · Adriaan

Сопоставление диска с sharepoint (также https)

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

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

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

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

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

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

Ответ 8 · рейтинг 1 · mpdrsn

Сопоставление папки WebDAV - мой предпочтительный метод создания легкодоступного долгосрочного подключения к SharePoint. Однако вы обнаружите - даже при правильном сопоставлении - что файл будет возвращать URL-адрес при выборе (особенно через Application.FileDialog) из-за изменений в Windows 10 1803.

Чтобы обойти это, вы можете сопоставить диск с помощью DriveMapper (или его эквивалента), а затем объединить полученный Application.FileDialog.SelectedItems с функцией преобразования URL-адреса в UNC:

Public Function SharePointURLtoUNC( _
  sURL As String) _
As String
  Dim bIsSSL As Boolean

  bIsSSL = InStr(1, sURL, "https:") > 0
  sURL = Replace(Replace(sURL, "/", "\"), "%20", " ")
  sURL = Replace(Replace(sURL, "https:", vbNullString), "http:", vbNullString)

  sURL= Replace(sURL, Split(sURL, "\")(2), Split(sURL, "\")(2) & "@SSL\DavWWWRoot")
  If Not bIsSSL Then sURL = Replace(sURL, "@SSL\", vbNullString)
  SharePointURLtoUNC = sURL
End Function

Ответ 9 · рейтинг -2 · Community

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы