Word 2007 - 在字段中使用通配符

Word 2007 - 在字段中使用通配符

我需要在 Word 2007 中创建一个字段,当其文件不在预期目录(名为“Release”的文件夹)中时,该字段将显示一些文本。驱动器映射和顶级文件夹在每台机器上和每个文档上可能都不同。

我尝试使用

{ 如果“{ FILENAME \p }” = “*Release*” “OK” “文档已过期” }

但这并不能给出正确的结果。我也尝试使用 COMPARE,但没有成功。事实证明我不能一次使用两个通配符,请参阅: Word 合并域通配符未正确匹配

有人知道解决这个问题的方法吗?或者有人可以建议一种解决方法吗?

我无法轻松实现 VBA 解决方案,因为没有用户会激活文档的宏或信任证书,并且管理层不愿意允许受信任的位置。

答案1

对于未来的读者,只要您知道路径很短,原始建议(在底部)可能仍然有用。

我修改了最近的建议,因为在其原始形式中,当文档不在 Release 文件夹中但 Release 文件夹中存在同名且字段的文档时,该文档会尝试包含自身,直到 Word 达到其字段嵌套限制(大约 19/20 级),然后弹出错误对话框。这种方法可能存在的另一个问题是,Word 在某些情况下可能会弹出对话框(我发现当文档位于 UNC 路径而不是驱动器号:类型路径中时,Word 2010/Win 7 会弹出对话框,但我不知道具体是什么情况和设置会导致该问题。据我所知,该字段在这种情况下仍能正常工作,但对话框弹出几乎肯定会让最终用户感到不安(至少如此)。

要实现此功能,您必须插入不包含 { IF } 字段的书签。为了让用户更难删除,您可以单击“Error!”文本前面的按钮,然后在那里插入一个点书签。我使用了书签名称“bkmk_release”

否则,我能做到的最好的就是这个,它依赖于通常在 Word 中起作用的 Windows 路径名“技巧”,并且可以超出 128 个字符的路径限制(我怀疑下一个限制将是总共 256 个字符。):

{ IF "{ INCLUDETEXT "{ FILENAME \p }\\..\\..\\Release\\{ FILENAME }" bkmk_rlease }" = "Error! Include may not refer to itself." "DOCUMENT OUT OF DATE" "OK" }

也就是说,如果您的文件可以合法地位于 http:// 地址,它可能无法工作。目前,它依赖于英语设置。您可以使用以下方法改进它

{ IF "{ INCLUDETEXT "{ FILENAME \p }\\..\\..\\Release\\{ FILENAME }" bkmk_release }" = "{ INCLUDETEXT "{ FILENAME \p }" }" "DOCUMENT OUT OF DATE" "OK" }

但我没有检查过。

换句话说,如果文件位于 Release 文件夹中,则它会尝试包含自身,并且 INCLUDETEXT 应该返回错误。如果文件不在 Release 文件夹中,则 includetext 将尝试打开 Release 文件夹中的同名文件。如果该文件不存在,您将看到不同的错误(可能不止一种可能性),例如不存在、名称无效。唯一的问题是如果它确实存在并且包含文本“错误!包含可能不引用自身。” :-)

可能还存在一些其他“边缘情况”,例如,如果文档位于顶层文件夹中。

原来的建议:

只要 Release 始终是包含文件的文件夹,而不是层次结构中更高级别的文件夹,就可以执行如下操作:

{ IF "{ INCLUDETEXT "{ FILENAME \p }\\..\\..\\Release\\{ FILENAME }" }" = "{ INCLUDETEXT "{ FILENAME \p }" }" "DOCUMENT OUT OF DATE" "OK" }

尽管进一步考虑这个问题,较长的路径名可能会有问题——甚至 128 个字符也可能是一个限制,这在某些情况下会排除这种情况。

相关内容