使用VBA或VSTO从存储在SharePoint中的Word文档读取/写入人员元数据?

时间:2008-09-04 21:13:32

标签: sharepoint vba ms-office vsto

方案:SharePoint中的文档库,其中列x为“人员或组”类型。在VBA宏(或VSTO加载项)中,我们尝试访问文档上的MetaProperty来设置/获取用户名。任何通过ContentTypeProperties集合访问该值的尝试都会抛出

  

输入MisMatch错误(13)。

MetaProperty对象的Type属性表示它是msoMetaPropertyTypeUser。我找不到任何有关如何使用此类MetaProperties的示例。有人有这方面的经验吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

你应该可以做这样的事情:

    using (SPSite site = new SPSite("http://yoursite/subsite"))
    {
        using (SPWeb web = site.OpenWeb())
        {
            SPList list = web.Lists["DocLibraryName"];
            SPListItemCollection items = list.GetItems(list.Views["All Documents"]);
            foreach (SPListItem item in items)
            {
                item["Modified By"] = "Updated Value";
            }
        }
    }

通过索引SPListItem的列名,可以获得文档的任何元数据。

答案 1 :(得分:1)

我做到了。

这里的技巧实际上是要知道如果你在Word文档的自定义属性中的MOSS用户中放置了与用户索引相对应的字符串,MOSS将识别它并找到相应的用户来映射该字段。

所以你只需要调用http:///_vti_bin/usergroup.asmx 使用函数GetUserInfo并从中检索用户索引(ID)。

MOSSusergroup.UserGroup userGroupService = new MOSSusergroup.UserGroup();
userGroupService.Credentials = System.Net.CredentialCache.DefaultCredentials;
System.Xml.XmlNode node = userGroupService.GetUserInfo(userLogin);
string index = node.FirstChild.Attributes["ID"].Value;