Мне не повезло ни с OpenXML API, ни с Word/VSTO API, найти способ создать или изменить видимость закладки. Даже при добавлении закладок вручную в Word не нужно устанавливать флажок, чтобы сделать закладку скрытой. Хотя в диалоговом окне «Закладки» есть есть флажок, который позволяет показывать скрытые закладки. Так как же скрытые закладки представлены в XML и можно ли их создать с помощью Open XML SDK? Или это устаревшая вещь, которую MS больше не хочет, чтобы мы создавали?
Word/OpenXML — Как создать скрытую закладку?
Ответы (2)
Итак, это проще, чем я думал... вы просто ставите перед именем закладки знак подчеркивания. Обратите внимание, что это можно сделать только программно, а не при добавлении закладок вручную в Word.
Иииииии интересно....
Обновление: Еще одна вещь, которую я обнаружил: прежде чем вы сможете выполнить итерацию или получить доступ к скрытым закладкам в Bookmarks, необходимо установить его ShowHidden в true.
PS - ТАК, если у вас есть какой-либо контроль над словарем правописания, вы можете добавить «программно». Если я не ошибаюсь в написании. :)
Я создал обычные закладки в файле 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();
}