我正在尝试修改.docx文档的一些CustomDocumentProperties。我已经能够读取当前值并对其进行修改,但是当我保存文档时,对自定义字段的更改将丢失。
我在DocAccessor类中有以下方法(用作我的doc文件的接口):
void SetInfo(string key, string val) {
object custom_properties = current_doc.CustomDocumentProperties;
Type custom_properties_type = custom_properties.GetType();
custom_properties_type.InvokeMember("Item", BindingFlags.Default | BindingFlags.SetProperty, null, custom_properties, new object[] { key, val });
}
在其他地方,我打电话给:
doc_accessor.GetInfo("Number") //returns 5
doc_accessor.SetInfo("Number", "6");
doc_accessor.GetInfo("Number") //returns 6
doc_accessor.SaveAndClose();
doc_accessor.Open(); //it retains the path, so I don't need to respecify
doc_accessor.GetInfo("Number") //returns 5
我的doc_accessor.SaveAndClose()函数正常工作,因为我修改了保存到不同位置的路径并且它确实...但是没有编写修改后的CustomDocumentProperties。这使得它似乎有一个我缺少的排序提交步骤,但是不应该current_doc.Save()处理它吗?
答案 0 :(得分:1)
http://support.microsoft.com/kb/195425
http://msdn.microsoft.com/en-us/library/y1xatbkd(VS.80).aspx
我不知道其中任何一个会有所帮助。 但这就是我要开始的地方。
很抱歉我必须删除协议标题的链接,因为堆栈不认为我应该能够在我的答案中有多个链接,因为我不是真正的成员
答案 1 :(得分:1)
我在2分钟前解决了同样的问题。
当您添加/更改自定义属性时,似乎文档不是changed
,因此WordApplication.ActiveDocument.Saved
仍为true
。
将其设置为false
,然后调用文档的Save方法,它将起作用!!