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

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


person System.Cats.Lol    schedule 30.03.2011    source источник
comment
Твое имя (System.Cats.Lol) — мое любимое имя на SO.   -  person Carl G    schedule 25.12.2012


Ответы (2)


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

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

Обновление: Еще одна вещь, которую я обнаружил: прежде чем вы сможете выполнить итерацию или получить доступ к скрытым закладкам в Bookmarks, необходимо установить его ShowHidden в true.

PS - ТАК, если у вас есть какой-либо контроль над словарем правописания, вы можете добавить «программно». Если я не ошибаюсь в написании. :)

person System.Cats.Lol    schedule 30.03.2011
comment
действительно интересно. вы можете продолжить и принять свой ответ с пустой галочкой рядом с ним. - person Todd Main; 03.04.2011
comment
Спасибо - они заставляют вас ждать два дня, прежде чем вы сможете принять свой собственный ответ, поэтому этого еще не было. :) - person System.Cats.Lol; 04.04.2011
comment
Ах, да, два дня ожидания. однажды у меня был вопрос, который я задал, и примерно через 5 минут нашел ответ. пришлось ждать 2 дня и получил несколько других (хороших, но не замечательных) ответов. фу. - person Todd Main; 06.04.2011

Я создал обычные закладки в файле 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();
}
person Abhijit Amin    schedule 30.05.2013