Получите содержимое папки 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
Единственный способ, который я нашел для работы с файлами в 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". Скопируйте путь, который вы видите там, и используйте его.
Возможно, это сработает не для всех, но для меня это сработало.
Если вы используете безопасный сайт (или хотите обслуживать оба), вы можете добавить следующую строку:
myFilePath = replace(myFilePath, "https:", "")
Ответ 5 · рейтинг 2 · BigD
ИМХО, самый крутой способ - через WebDAV (без сетевой папки, так как это часто недопустимо). Это можно сделать с помощью объектов данных ActiveX, как описано в этом отличная статья отличная статья (код можно использовать прямо в Excel, недавно использовал эту концепцию).
Я потратил некоторое время на решение этой самой проблемы - я пытался проверить, существует ли файл, прежде чем открывать его.
В конце концов, я придумал решение с использованием 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. Затем выберите диск и путь в вашем коде.