1

我一直在努力通过 COM 接口为 word 文档设置 customProperties(和内置属性)并且成功了。但是,这些属性仅在 Word 中可见,而在摘要选项卡中不可见。

问题

好的,所以在开场白中,我有点误导以简化问题。我正在使用 netOffice 包装器与单词 interop 组件进行交互(使部署变得非常容易),它用于通过 ASP.Net 门户自动执行邮件合并。我使用相同的方法将文档 ID 添加到 CustomDocumentProperties。

此 ID 随后由控制台应用程序获取,该应用程序使用 DSOFile.dll 访问 OLE/Summary 属性。

现在,虽然我可以在 word 中看到我的自定义 databaseID 字段,但它不在摘要选项卡中(见下文),我认为这是 DSOFile 从中获取它们的地方,内置和自定义属性都会发生这种情况。我对这两者有何不同或为什么它们失去同步一无所知。

测试

从我所做的测试中,我很惊讶添加/更改属性然后保存它们并不能解决文档属性的问题。但是,将它们保存到新文件将更新摘要。此外,在保存摘要选项卡甚至不出现的位置后,还会出现明显的延迟,看起来后台进程负责更新它们。

如果您没有适合我的解决方案,我很想知道摘要属性与 word 文档中存储的属性有何不同。

显示属性不是在摘要选项卡中设置的,而是在 word 中设置的。

如果它很重要,我今天添加属性的问题不是文档不是“脏”时的典型保存。相反,我保持模板打开以及完成的文档,并且需要在保存之前激活它。

如果我错过了任何重要的细节,请告诉我,提前致谢!

4

1 回答 1

1

(这是对这个问题的一些评论的合并)

当文档在 Word 中打开时,您不太可能在文件系统的属性查看器中查看自定义属性。

这可能是一种安全机制,可以防止两个单独的进程同时更新属性。

OLE 结构化存储文件是 OLE 对象。它们仅在对象的 OLE 引用计数减少到 0 时才会关闭。

因此,例如,如果某些代码正在使用 DSOFile 添加属性并且没有释放 OLE 对象,则文件将保持打开状态。如果 OLE 对象被释放并且文件被“关闭”,尝试更新文件的其他进程的行为可能与它们的行为不同。

于 2016-03-20T19:21:37.670 回答