我正在尝试以编程方式更新现有的自定义属性.doc(word 97 - 2003)。我最初使用Aspose解决了,但由于许可证有限,我无法将其用于此项目。
此代码是从此处批发的,只需对word进行少量修改,而不是excel Accessing Excel Custom Document Properties programatically。
第一种方法用于添加自定义属性(如果它不存在),第二种方法可以提取自定义属性。我还没想出如何更新已经存在的属性。我认为它可能与InvokeMember()中的动词有关但我找不到太多文档。
public void SetDocumentProperty(string propertyName, string propertyValue)
{
object oDocCustomProps = oWordDoc.CustomDocumentProperties;
Type typeDocCustomProps = oDocCustomProps.GetType();
object[] oArgs = {propertyName,false,
MsoDocProperties.msoPropertyTypeString,
propertyValue};
typeDocCustomProps.InvokeMember("Add",
BindingFlags.Default | BindingFlags.InvokeMethod,
null,
oDocCustomProps,
oArgs);
}
public object GetDocumentProperty(string propertyName, MsoDocProperties type)
{
object returnVal = null;
object oDocCustomProps = oWordDoc.CustomDocumentProperties;
Type typeDocCustomProps = oDocCustomProps.GetType();
object returned = typeDocCustomProps.InvokeMember("Item",
BindingFlags.Default |
BindingFlags.GetProperty, null,
oDocCustomProps, new object[] { propertyName });
Type typeDocAuthorProp = returned.GetType();
returnVal = typeDocAuthorProp.InvokeMember("Value",
BindingFlags.Default |
BindingFlags.GetProperty,
null, returned,
new object[] { }).ToString();
return returnVal;
}
答案 0 :(得分:3)
不知道您是否找到了正确的答案,但对于访问此页面的任何人来说,都希望设置现有的自定义文档属性。您似乎需要首先使用BindingFlags.GetProperty
检索文档属性,然后使用BindingFlags.SetProperty
设置检索到的特定项的值。
您还可以添加一些自定义检查,以确定您尝试设置的对象是否有效。
public void SetDocumentProperty(string propertyName, object value)
{
// Get all the custom properties
object customProperties = wordDocument.CustomDocumentProperties;
Type customPropertiesType = customProperties.GetType();
// Retrieve the specific custom property item
object customPropertyItem = customPropertiesType.InvokeMember("Item",
BindingFlags.Default | BindingFlags.GetProperty, null, customProperties,
new object[] { propertyName });
Type propertyNameType = customPropertyItem.GetType();
// Set the value of the specific custom property item
propertyNameType.InvokeMember("Value", BindingFlags.Default | BindingFlags.SetProperty, null,
customPropertyItem, new object[] { value });
}
答案 1 :(得分:0)
我们通常将所有道具检索到列表并从文档中删除,更改值并再次插入。我们使用DSOFile.dll方法