在C#2.0中保存Word 2007文档属性

时间:2009-10-06 18:14:18

标签: c# .net properties ms-word

我正在尝试修改.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()处理它吗?

2 个答案:

答案 0 :(得分:1)

http://support.microsoft.com/kb/195425

http://msdn.microsoft.com/en-us/library/y1xatbkd(VS.80).aspx

我不知道其中任何一个会有所帮助。 但这就是我要开始的地方。

http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.documentclass.saved(office.11).aspx

很抱歉我必须删除协议标题的链接,因为堆栈不认为我应该能够在我的答案中有多个链接,因为我不是真正的成员

答案 1 :(得分:1)

我在2分钟前解决了同样的问题。

当您添加/更改自定义属性时,似乎文档不是changed,因此WordApplication.ActiveDocument.Saved仍为true

将其设置为false,然后调用文档的Save方法,它将起作用!!