c# - 防止 Word 文档的字段在打开时更新

标签 c# ms-word office-interop

我为另一个团队编写了一个实用程序,它通过使用 Word Interop 和 C# 递归地遍历文件夹并将找到的 Word 文档转换为 PDF。

我们遇到的问题是文档创建时的日期字段在保存之前更新为今天的日期。我找到了一种在打印前禁用更新字段的方法,但我需要防止字段在打开时更新。

这可能吗?我想在 C# 中进行修复,但如果我必须进行 Word 宏,我也可以。

最佳答案

如微软无尽迷宫中所述documentation您可以锁定域代码。例如在 VBA 中,如果我在正文中有一个日期字段,格式为

{DATE  \@ "M/d/yyyy h:mm:ss am/pm"  \* MERGEFORMAT }

我能跑

ActiveDocument.Fields(1).Locked = True

然后如果我对文档进行更改,保存,然后重新打开,字段代码将不会更新。

使用 c# Office Interop 的示例:

Word.Application wordApp = new Word.Application();
Word.Document wordDoc = wordApp.ActiveDocument;
wordDoc.Fields.Locked = 1; //its apparently an int32 rather than a bool

您可以将代码放在DocumentOpen 事件中。我假设您有一个订阅事件的加载项。如果不是,请澄清,因为这本身就是一场战斗。

编辑:在我的测试中,以这种方式锁定字段会在所有 StoryRanges 中锁定它们,因此无需在页眉、页脚、脚注、文本框等中获取字段实例,...等。这是一种令人惊讶的款待。

关于c# - 防止 Word 文档的字段在打开时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15974125/

相关文章:

ms-word - 不使用 Interop 操作 Microsoft Word 文档

c# - 匹配大文本文件中的字符串?

c# - 正则表达式查找组内的值

c# - MailMerge:从 Excel 到 Word C#

vba - 使用 Excel 宏中的 Word Selection 对象

c# - 如何在 C# 字互操作中退格?

c# - Null 条件运算符不能用于赋值?

c# - 嵌套的 Json 字符串到 DataTable

c# - 使用 C# 读取 Outlook 邮件

c# ms word 获取可见文本