使用 VBA 读取 SharePoint 文档库中文件的元数据或文件属性

问题描述 投票:0回答:1

我在 SharePoint 网站上有数百个 Word 模板 (DOTX)。许多用户团队都使用这些模板。

当用户需要自定义此文档时,他们可以单击 SharePoint 上的特殊链接,以从他们选择的模板生成新文档 (DOCX)。此新文档文件始终需要“链接”回其在 SharePoint 上的模板文件。如果文档丢失该链接,它将无法正常工作并被视为“已损坏”。

当文档损坏时,我需要重新建立指向 SharePoint 上正确模板的链接。以编程方式执行此操作是有意义的,这样我就可以将解决方案分发给我的团队。

我想为每个模板文件提供一个唯一的模板 ID(三位数),存储在元数据或自定义文件属性中。当从模板生成新文档时,模板 ID 会自动转移到文档中,这样就完成了设置。现在我只需要使用VBA扫描SharePoint文档库中的模板文件来查找匹配的模板ID。找到后,我可以重新建立链接,一切都很好。

我基本上是在寻找这个:

Sub DocFixer()

Dim objTemplate as Template
Dim objBrokenDoc as Document

Set objBrokenDoc = ActiveDocument

For each objTemplate in "\\SharePoint\Template Library\".Templates
    If objTemplate.Properties("Template ID").Value = objBrokenDoc.Properties("Template ID").Value Then
        objBrokenDoc.AttachedTemplate = objTemplate.Path
        Exit For
    End If
Next

End Sub

…但我在使用 VBA 读取 SharePoint 文档库内容时遇到了麻烦,而无需实际打开内容,因为模板太多,这会花费太长时间,而且对用户来说非常具有破坏性。

有什么想法吗?你能指出我正确的方向吗?

编辑:这是我的解决方案:

Sub Macro()

Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")

Dim objFile As Object
Dim objDSO As Object

For Each objFile In FSO.GetFolder("\\SharePoint\doc lib\").Files
    Set objDSO = CreateObject("DSOFile.OleDocumentProperties")
    objDSO.Open objFile.Path

    If objDSO.CustomProperties.Item("Template_ID") = ActiveDocument.CustomDocumentProperties("Template_ID").Value Then
        ActiveDocument.AttachedTemplate = objFile.Path
        End
    End If
Next

MsgBox ("No matching template found. Please attach the proper template manually."), vbCritical

End Sub

显然这会利用DSOFile.dll(http://technet.microsoft.com/en-us/library/ee692828.aspx),但我不必添加引用?仍然对那部分感到困惑。

此外,这可能无法通过 https:// (SSL) 运行。虽然为我工作,所以我想我会分享。

sharepoint vba metadata
1个回答
0
投票

我首先从 VBA 调用 SharePoint Web 服务。 到达那里后,您可以调用 GetListItems,这将直接拉回具有正确 TemplateID 属性的文档。

© www.soinside.com 2019 - 2024. All rights reserved.