使用Excel VBA获取sharepoint文件夹的内容

时间:2009-08-28 03:39:06

标签: 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

编辑(经过shahkalpesh的好评):

如果我在Windows资源管理器中输入地址,我可以访问sharepoint。访问sharepoint需要进行身份验证,但它是透明的,因为它依赖于Windows登录。

9 个答案:

答案 0 :(得分:13)

我发现在拥有服务器权限时使用SharePoint上的文件的唯一方法是将WebDAV文件夹映射到驱动器号。这是实现的一个例子。

在VBA中添加对以下ActiveX库的引用:

  • Windows脚本宿主对象模型(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

答案 1 :(得分:12)

使用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资源管理器中打开”。复制您在那里看到的路径并使用它。

答案 2 :(得分:10)

除了:

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

也取代空间:

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

答案 3 :(得分:2)

恕我直言,最酷的方式是通过WebDAV(没有网络文件夹,因为这通常是不允许的)。这可以通过这篇excellent article优秀文章中列出的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

答案 4 :(得分:2)

我把这个问题搞砸了一下,找到了一个非常简单的2行解决方案,只需将'http'和所有正斜杠替换为:

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

它可能不适合所有人,但它对我有用

如果您使用的是安全网站(或希望同时满足这两个网站),您可能希望添加以下内容:

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

答案 5 :(得分:1)

我在这个问题上花了一些时间 - 我试图在打开它之前验证文件是否存在。

最后,我想出了一个使用XML和SOAP的解决方案 - 使用EnumerateFolder方法并使用文件夹的内容提取XML响应。

我在博客上发表了here

答案 6 :(得分:1)

映射WebDAV文件夹是我创建与SharePoint的易于访问的长期连接的首选方法。但是,您会发现,即使正确映射,由于Windows 10 1803的更改,文件在被选择时(尤其是通过function wc_add_date_to_gutenberg_block( $html, $data, $product ) { $dateStr = get_post_meta($product->id, 'ticket_start_time', true); $date = new DateTime($dateStr); $data->date = "<p>Date: " . $date->format('d-m-Y H:i') . "</p>"; $output = " <li class=\"wc-block-grid__product\"> <a href=\"{$data->permalink}\" class=\"wc-block-grid__product-link\"> {$data->image} {$data->title} </a> {$data->date} <- I added this one {$data->badge} {$data->price} {$data->rating} {$data->button} </li> "; return $output; } add_filter("woocommerce_blocks_product_grid_item_html", "wc_add_date_to_gutenberg_block", 10, 3); )也会返回URL。

要避免这种情况,您可以使用Application.FileDialog(或等效名称)映射驱动器,然后将生成的DriveMapper与URL转换为UNC转换器函数:

Application.FileDialog.SelectedItems

答案 7 :(得分:0)

将映射驱动到sharepoint(也是https)

获取sharepoint内容通过映射驱动器为我工作,将其作为文件系统对象进行迭代;技巧是如何设置映射: from sharepoint, open as explorer 然后复制路径(带有http *的行)(见下文)

address in explorer

在资源管理器或命令(即net use N: https:://thepathyoujustcopied)的地图驱动器中使用此路径 注意:https适用于windows7 / 8,而不适用于XP。

这可能对您有用,但我更喜欢不同的方法,因为每台PC上的驱动器号都不同。这里的技巧是从sharepoint开始(而不是从作为Web服务器访问sharepoint的VBA脚本)。

设置与Excel工作表的数据连接

    在sharepoint中,浏览到要监控的视图
  • 导出视图到excel(2010年:库工具; libarry |导出到Excel) export to excel
  • 查看此Excel时,您会找到一个数据源设置(选项卡:数据,连接,属性,定义)

connection tab

您可以在vba中包含此查询,或者在您的speadsheet中维护数据库链接,通过VBA迭代表。请注意:上图不显示实际的数据库连接(命令文本),它将告诉您如何访问我的 sharepoint。

答案 8 :(得分:-2)

尝试将sharepoint库映射到Windows中的驱动器号。然后在代码中选择驱动器和路径。