通常我使用这段代码来检索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登录。
答案 0 :(得分:13)
我发现在拥有服务器权限时使用SharePoint上的文件的唯一方法是将WebDAV文件夹映射到驱动器号。这是实现的一个例子。
在VBA中添加对以下ActiveX库的引用:
wshom.ocx
) - 适用于WshNetwork 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内容通过映射驱动器为我工作,将其作为文件系统对象进行迭代;技巧是如何设置映射: 然后复制路径(带有http *的行)(见下文)
在资源管理器或命令(即net use N: https:://thepathyoujustcopied
)的地图驱动器中使用此路径
注意:https适用于windows7 / 8,而不适用于XP。
这可能对您有用,但我更喜欢不同的方法,因为每台PC上的驱动器号都不同。这里的技巧是从sharepoint开始(而不是从作为Web服务器访问sharepoint的VBA脚本)。
设置与Excel工作表的数据连接
您可以在vba中包含此查询,或者在您的speadsheet中维护数据库链接,通过VBA迭代表。请注意:上图不显示实际的数据库连接(命令文本),它将告诉您如何访问我的 sharepoint。
答案 8 :(得分:-2)
尝试将sharepoint库映射到Windows中的驱动器号。然后在代码中选择驱动器和路径。