【问题标题】:Word/OpenXML - How do I create a hidden bookmark?Word/OpenXML - 如何创建隐藏书签?
【发布时间】:2015-02-26 03:57:39
【问题描述】:

我在 OpenXML API 或 Word/VSTO API 中都没有找到创建或修改书签可见性的方法。即使在 Word 中手动添加书签,也没有复选框可以选中以隐藏书签。尽管在“书签”对话框中有一个复选框,可让您显示隐藏的书签。那么隐藏的书签在 XML 中是如何表示的,您可以使用 Open XML SDK 创建它们吗?或者它们是 MS 不再希望我们创造的遗留物?

【问题讨论】:

  • 你的名字(“System.Cats.Lol”)是我在 SO 上的最爱。

标签: ms-word vsto openxml


【解决方案1】:

好的,这比我想象的要容易...您只需在书签名称前加上下划线即可。请注意,这只能以编程方式完成,不能在 Word 中手动添加书签时完成。

Iiiiiiii有趣....

更新:我发现的另一件事 - 在您可以迭代或访问 Bookmarks 对象中的隐藏书签之前,您必须将其 ShowHidden 属性设置为 true。

PS - 所以,如果您对拼写词典有任何控制权,则可以添加“以编程方式”。除非我拼写错误。 :)

【讨论】:

  • 确实很有趣。您可以继续并使用旁边的空心复选标记接受您的答案。
  • 谢谢 - 他们让你等待两天才能接受你自己的答案,这就是为什么它还没有。 :)
  • 啊,是的,两天的等待。一旦我有一个问题,我问了大约 5 分钟后发现了答案。不得不等待 2 天并得到其他一些(好的,但不是很好)的答案。呃。
【解决方案2】:

我在 word 文件中创建了普通书签,然后实用地将它们转换为隐藏书签。如上所述,隐藏书签只能实用地创建,它们的名称以“_”开头。每次迭代书签列表时,请确保 Bookmarks.ShowHidden 设置为 true,否则隐藏的书签将不会显示在列表中。下面是我用来隐藏所有可见书签的代码。最后,我还清除了撤消记录,以确保用户无法撤消我所做的更改。如果您愿意,您可以创建自定义撤消记录删除最后一个操作。

public static void hideAllBookmark(Document doc)
{
    String newName = null;
    Range newRange = null;
    bool backup = doc.Bookmarks.ShowHidden;
    doc.Bookmarks.ShowHidden = false;

    for (int i = doc.Bookmarks.Count; i > 0; i--)
    {
        if (!doc.Bookmarks[i].Name.Substring(0, 1).Equals("_", StringComparison.OrdinalIgnoreCase))
        {
            newName= "_" + doc.Bookmarks[i].Name;
            newRange = doc.Bookmarks[i].Range;
            doc.Bookmarks[i].Delete();
            doc.Bookmarks.Add(newName, newRange);
        }
    }
    doc.Bookmarks.ShowHidden = backup;
    doc.UndoClear();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多