sharepoint - notificar - recibir notificaciones de teams
Obtenga el contenido de una carpeta sharepoint con Excel VBA (8)
En mi humilde opinión, la mejor manera es ir a través de WebDAV (sin la carpeta de red, ya que a menudo no está permitido). Esto se puede lograr a través de ActiveX Data Objects como se describe en este artículo excelente artículo excelente (el código se puede usar directamente en Excel, utilizó el concepto recientemente).
¡Espero que esto ayude!
http://blog.itwarlocks.com/2009/04/28/accessing-webdav-in-microsoft-word-visual-basic/
el enlace original está muerto, pero al menos el contenido textual todavía está disponible en archive.org: http://web.archive.org/web/20091008034423/http://blog.itwarlocks.com/2009/04/28/ accessing-webdav-in-microsoft-word-visual-basic
Usualmente uso este fragmento de código para recuperar el contenido de una carpeta en VBA. Pero esto no funciona en el caso de un punto compartido. Como lo puedo hacer ?
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
EDITAR (después de un buen comentario de shahkalpesh):
Puedo acceder al sharepoint si ingreso la dirección en Windows Explorer. El acceso al punto compartido necesita una autenticación, pero es transparente, ya que depende del inicio de sesión de Windows.
Intente mapear la biblioteca de SharePoint en una letra de unidad en Windows. Luego seleccione la unidad y la ruta en su código.
La única forma en que he encontrado que trabajar con archivos en SharePoint teniendo en cuenta los derechos del servidor es asignar la carpeta WebDAV a una letra de unidad. Aquí hay un ejemplo para la implementación.
Agregue referencias a las siguientes bibliotecas ActiveX en VBA:
- Modelo de objetos de host de Windows Script (
wshom.ocx
) - para WshNetwork - Microsoft Scripting Runtime (
scrrun.dll
) - para FileSystemObject
Cree un nuevo módulo de clase, DriveMapper
y agregue el siguiente código:
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
Entonces puedes implementarlo en tu código:
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
Pasé un tiempo con este problema: estaba intentando verificar que existía un archivo antes de abrirlo.
Eventualmente, se me ocurrió una solución usando XML y SOAP: use el método EnumerateFolder y obtenga una respuesta XML con los contenidos de la carpeta.
Blogé sobre esto aquí .
Además de:
myFilePath = replace(myFilePath, "/", "/")
myFilePath = replace(myFilePath, "http:", "")
también reemplaza el espacio:
myFilePath = replace(myFilePath, " ", "%20")
Mapeo de la unidad a compartir (también https)
Conseguir que los contenidos de Sharepoint funcionen para mí a través de la unidad mapeada iterándolo como un objeto de sistema de archivos; truco es cómo configurar el mapeo: Luego copie la ruta (línea con http *) (ver a continuación)
Utilice esta ruta en Unidad de mapa desde el explorador o comando (es decir, net use N: https:://thepathyoujustcopied
) Nota: https funciona bien con windows7 / 8, no con XP.
Eso puede funcionar para usted, pero prefiero un enfoque diferente, ya que las letras de unidad son diferentes en cada PC. El truco aquí es comenzar desde sharepoint (y no desde un script de VBA accediendo a sharepoint como un servidor web).
Configurar una conexión de datos a la hoja de Excel
- en sharepoint, vaya a la vista que desea monitorear
- exportar vista para sobresalir (en 2010: herramientas de biblioteca; libarry | exportar a Excel)
- Al visualizar este Excel, encontrará una configuración de fuente de datos (pestaña: datos, conexiones, propiedades, definición)
Puede incluir esta consulta en vba o mantener el enlace de la base de datos en su hoja de cálculo, iterando sobre la tabla por VBA. Tenga en cuenta: la imagen de arriba no muestra la conexión real de la base de datos (texto del comando), que le indicará cómo acceder a mi recurso compartido.
Me metí con este problema por un tiempo, y encontré una solución muy simple de 2 líneas, simplemente reemplazando el ''http'' y todas las barras diagonales así:
myFilePath = replace(myFilePath, "/", "/")
myFilePath = replace(myFilePath, "http:", "")
Puede que no funcione para todos, pero funcionó para mí
Si está utilizando un sitio seguro (o desea atender ambos), puede agregar la siguiente línea:
myFilePath = replace(myFilePath, "https:", "")
Use la ruta UNC en lugar de HTTP. Este código funciona:
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
Para utilizar la ruta UNC, vaya a la carpeta en la biblioteca de documentos, abra el menú Acciones y elija Abrir en el Explorador de Windows. Copie la ruta que ve allí y use eso.