Word / OpenXML - 如何创建隐藏的书签?

时间:2011-03-30 13:33:48

标签: ms-word vsto openxml

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

2 个答案:

答案 0 :(得分:13)

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

... Iiiiiiiiinteresting

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

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

答案 1 :(得分:0)

我在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();
}