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