Получить содержимое папки 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 работало для меня через сопоставленный диск, итератируя его как объект файловой системы; трюк заключается в том, как настроить отображение:
Затем скопируйте путь (строка с 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 с буквой диска в окнах. Затем выберите диск и путь в вашем коде.