繁体   English   中英

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

[英]Using VBA to read the metadata or file properties of files in a SharePoint doc library

我在 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)。 虽然为我工作,所以我想我会分享。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM