Word / OpenXML-как создать скрытую закладку?

Мне не повезло ни в API OpenXML, ни в API Word/VSTO, найдя способ создать или изменить видимость закладки. Даже добавляя закладки вручную в Word, нет флажка, чтобы сделать закладку скрытой. Хотя там is флажок в диалоговом окне закладки, который позволяет показать скрытые закладки. Итак, как скрытые закладки представлены в XML, и вы можете создать их с помощью Open XML SDK? Или они являются наследием, которое MS больше не хочет создать?

2 ответов


хорошо, так что это проще, чем я думал...вы просто предшествуете имени закладки с подчеркиванием. Обратите внимание, что это можно сделать только программно, а не при добавлении закладки вручную в Word.

Iiiiiiiiii интересно....

обновление: еще одна вещь, которую я нашел-прежде чем вы сможете повторить или получить доступ к скрытым закладкам в закладки объект, вы должны установить его ShowHidden свойство true.

PS-SO, если у вас есть контроль над орфографическим словарем, вы можете добавить "программно". Если я не ошибаюсь. :)


Я создал обычные закладки в файле word и затем преобразовал их в скрытую закладку прагматически. Как сказано выше, скрытые закладки могут быть созданы только прагматически, а их название предшествует"_". При повторении списка закладок убедитесь, что закладки.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();
}