2009-08-28 5 views
17

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

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 Explorer. Доступ к sharepoint требует аутентификации, но он прозрачен, потому что он зависит от входа Windows.

+0

способен перемещаться в папку Sharepoint помощью проводника Windows Вы? – shahkalpesh

+0

Да! Это похоже на обычную сетевую папку. – tachfine

ответ

8

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

+0

См. [This] (http://stackoverflow.com/questions/3233203/how-do-i-use-filesystemobject-in-vba) для включения FileSystemObject. – enderland

-2

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

2

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

+2

По состоянию на 02/07/2013 ссылка на эту статью кажется мертвой. Кто-нибудь знает, находится ли эта статья еще где-то еще? – armstrhb

+1

@armstrhb: есть копия на www.archive.org, но, кажется, имеется только текст, а не графика. – MostlyHarmless

11

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

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

  • для Windows Script Host Object Model (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 
+0

может показаться сложным для отображения сетевого диска; Я нашел [how-to-map-sharepoint] (http://stemrc.aihec.org/SharePoint%20Tips%20and%20Tricks/Creating%20a%20Windows%20Drive%20Mapping%20for%20a%20SharePoint%20Document%20Library. pdf) полезно для решения этой проблемы. – Adriaan

+0

Этот код выглядит очень многообещающим, но 'Sub test()' выбрасывает ошибку компиляции «Пользовательский тип не определен» для строки «Dim dm as New DriveMapper». Возможно, мне не хватает ссылки на DLL? Я добавил Microsoft Scripting Runtime, а также модель объекта хоста Windows Script. Использование Excel 2010. – Shrout1

+0

Извините за ответ так поздно @ shrout1, может быть, вы создали модуль вместо класса? –

0

Диска 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 году: библиотеки инструментов; libarry | экспорт в Excel) export to excel
  • при просмотре этого первенствовать, вы найдете источник данных настройки (вкладка: данные, соединения, свойства, определение)

connection tab

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

+0

Ссылка, ссылка на которую приведена выше, по состоянию на 9/10/2013. Есть ли возможность обновить версию? – Shrout1

+0

Связанный документ не был моим. Я добавил недостающую информацию в этой статье. – Adriaan

1

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

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

Об этом сообщается в блоге here.

0

я возился с этой проблемой на некоторое время, и нашел очень простой, 2 строки решения, просто заменив «HTTP» и все слэши так:

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

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

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

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

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

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

также заменить пространство:

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