Работа со стилями

Работа со стилями

Работа со стилями

Это руководство показывает, как работать со стилями абзацев, символов, таблиц и списков в Aspose.Words FOSS для .NET — поиск и применение встроенных и пользовательских стилей, а также настройка условного форматирования по регионам для стилей таблиц.

Объект Style представляет один встроенный или пользовательский стиль — именованную коллекцию форматирования абзаца, шрифта и списка, которую Word применяет, когда абзац или диапазон текста получает этот стиль. Каждый документ предоставляет свои стили через свойство Document.Styles, которое возвращает StyleCollection. Стили таблиц представлены TableStyle, подклассом Style, который добавляет специфическое для таблиц форматирование и условное форматирование по регионам через ConditionalStyleCollection.


Типы стилей и их идентификация

У каждого Style есть свойство Type типа StyleType, которое может принимать одно из значений Paragraph, Character, Table или List — соответствуя четырём типам стилей, поддерживаемых Word. Встроенные стили также несут независимое от локали перечисляемое значение StyleIdentifier (например, значения, соответствующие заголовкам, выделению и гиперссылкам), чтобы код мог искать встроенный стиль без зависимости от его отображаемого имени в конкретном языке. Читаемое человеком имя стиля доступно через Style.Name, а Style.Aliases возвращает любые альтернативные имена, которые Word признает для того же стиля. Style.BuiltIn сообщает, поставляется ли стиль вместе с Word или определён в документе, а Style.IsHeading сообщает, является ли стиль одним из встроенных стилей заголовков.

Доступ к коллекции стилей и её управление

StyleCollection — это коллекция всех объектов Style — встроенных и пользовательских — привязанных к документу, доступная через Document.Styles. Получить стиль по его отображаемому имени можно с помощью индексатора StyleCollection — styles[name] — или получить встроенный стиль по его независимому от локали StyleIdentifier, используя тот же индексатор — styles[sti] — что надёжнее, чем поиск по имени в документах, созданных на разных языках. Новые стили создаются с помощью StyleCollection.Add(type, name), указывая StyleType и имя, а существующий стиль можно дублировать в коллекцию с помощью StyleCollection.AddCopy(style). StyleCollection.Count сообщает, сколько стилей содержит документ, и коллекция также предоставляет DefaultFont и DefaultParagraphFormat, описывающие форматирование по умолчанию для всего документа, которое наследуется новым содержимым до применения какого-либо явного стиля. StyleCollection.ClearQuickStyleGallery() удаляет все стили из галереи быстрых стилей интерфейса Word, не удаляя сами стили.

Применение стилей к абзацам и фрагментам

Объекты форматирования, которые могут содержать стиль, предоставляют как свойство Style (сам объект Style), так и свойство StyleName (ярлык, который разрешает или создаёт стиль по имени). ParagraphFormat.Style и ParagraphFormat.StyleName применяют стиль абзаца, тогда как Font.Style и Font.StyleName применяют стиль символов к форматированию фрагмента. Свои свойства LinkedStyleName, BaseStyleName и NextParagraphStyleName стиля описывают его отношение к другим стилям: BaseStyleName указывает имя стиля, от которого он наследует неустановленное форматирование, LinkedStyleName указывает парный стиль абзаца/символов (как Word делает для встроенных стилей, таких как Heading 1 и его связанный стиль символов), а NextParagraphStyleName указывает стиль, который Word назначает новому абзацу, набранному после абзаца, использующего этот стиль.

Стили таблиц и условное форматирование

TableStyle расширяет Style, добавляя свойства таблицы-разметки, такие как Alignment, CellSpacing, LeftIndent, Shading, VerticalAlignment и отступы (LeftPadding, RightPadding, TopPadding, BottomPadding), а также RowStripe и ColumnStripe, которые управляют тем, через сколько строк или столбцов повторяется шаблон чередования. Помимо единообразного форматирования таблицы, TableStyle.ConditionalStyles возвращает ConditionalStyleCollection, содержащий по одному ConditionalStyle для каждой области таблицы — FirstRow, LastRow, FirstColumn, LastColumn, OddRowBanding, EvenRowBanding, OddColumnBanding, EvenColumnBanding и четырёх угловых ячеек (TopLeftCell, TopRightCell, BottomLeftCell, BottomRightCell). Каждый ConditionalStyle имеет свои Font, ParagraphFormat, Shading, Borders и отступ ячейки, а его свойство Type сообщает, какую ConditionalStyleType область он представляет. ConditionalStyle.ClearFormatting() и ConditionalStyleCollection.ClearFormatting() сбрасывают форматирование для одной области или для всего набора условных областей.

Метаданные стиля и флаги поведения

Несколько логических и числовых свойств в Style управляют тем, как Word обрабатывает стиль в пользовательском интерфейсе, а не тем, как он отображается: Locked предотвращает изменение стиля, когда активна защита форматирования, IsQuickStyle контролирует, появляется ли он в галерее быстрых стилей, AutomaticallyUpdate заставляет стиль переопределять себя из вручную применённого прямого форматирования, SemiHidden и UnhideWhenUsed управляют видимостью в списке стилей до и после первого использования, а Priority влияет на порядок сортировки в галерее. Стиль также предоставляет свойства List и ListFormat, когда он определяет нумерацию списка, и Style.Remove() удаляет стиль из его StyleCollection.


Советы и рекомендации

  • Отдавайте предпочтение индексу StyleCollection с значением StyleIdentifier, а не поиску по имени при поиске встроенного стиля — имена локализованы, а значения StyleIdentifier — нет.
  • Установите BaseStyleName для построения иерархий стилей (например, набор стилей заголовков, которые все наследуют выбор шрифта от одного базового стиля) вместо повторения форматирования в каждом стиле.
  • При копировании стиля между документами используйте StyleCollection.AddCopy(style), а не вручную считывать и повторно применять каждое свойство форматирования.
  • Настройте регионы TableStyle.ConditionalStyles для полосатых таблиц вместо ручного форматирования чередующихся строк в коде— каждый регион ConditionalStyle форматируется на основе его ConditionalStyleType, а не путем прямой установки форматирования для отдельных строк.
  • Проверьте Style.BuiltIn перед программным удалением или переименованием стиля; встроенные стили обычно упоминаются по имени в других частях документа.

Распространённые проблемы

ПроблемаПричинаИсправление
StyleCollection индексатор возвращает null при поиске имениИмя стиля не существует в этом документе, или встроенный стиль ещё не использовался, поэтому Word его не создалПроверьте Style.Aliases на наличие альтернативных имён, или используйте индексатор StyleCollection с StyleIdentifier для встроенных стилей вместо этого
Установка StyleName неожиданно создаёт новый стильStyleName создаёт именованный стиль, если он ещё не существует в коллекцииСначала используйте индексатор StyleCollection, чтобы убедиться, что стиль существует, или назначьте объект Style напрямую через свойство Style
Полосатость таблицы не появляется после применения TableStyleОбласти условного форматирования (OddRowBanding, EvenRowBanding и т.д.) никогда не были настроены на TableStyle.ConditionalStylesУстановите форматирование для соответствующих записей ConditionalStyle в ConditionalStyleCollection
Изменение стиля не влияет на контент, который уже использует этот стильПрямое (ручное) форматирование было применено поверх стиля и имеет приоритетОчистите прямое форматирование в затронутых участках/абзацах или задайте Style.AutomaticallyUpdate

FAQ

Как получить набор всех стилей в документе?

Прочитайте Document.Styles, который возвращает StyleCollection, содержащий все встроенные и пользовательские Style в этом документе.

В чём разница между Style и StyleIdentifier?

Style является фактическим объектом стиля с его форматированием; StyleIdentifier является независимым от локали значением перечисления, используемым для поиска конкретного встроенного стиля независимо от языка документа, через StyleCollection индексатор.

Чем стили таблиц отличаются от стилей абзаца или символа?

TableStyle — это подкласс Style, который добавляет свойства расположения таблицы (Alignment, CellSpacing, padding) и коллекцию ConditionalStyles для регионального форматирования, такого как чередующиеся строки, строки-заголовки и угловые ячейки — концепции форматирования, не применимые к стилям абзаца или символа.

Могу ли я создать совершенно новый стиль вместо изменения существующего?

Да — вызовите StyleCollection.Add(type, name), передав желаемый StyleType и новое имя, чтобы создать пустой стиль, затем задайте его свойства форматирования (Font, ParagraphFormat и т.д. для стилей абзаца/символа).

Как продублировать стиль, в том числе из другого документа?

Используйте StyleCollection.AddCopy(style), передавая объект Style (который может поступать из StyleCollection другого Document), чтобы добавить его копию в целевую коллекцию.


API Reference Сводка

Класс/МетодОписание:
StyleОдин встроенный или пользовательский стиль абзаца, символов, таблицы или списка
StyleCollectionКоллекция всех стилей в документе, доступная через Document.Styles
StyleCollection индексатор по имениНайдите стиль по его отображаемому имени, например styles["Heading 1"]
StyleCollection индексатор по идентификаторуНайдите встроенный стиль по независимому от локали идентификатору, например styles[StyleIdentifier.Heading1]
StyleCollection.Add(type, name)Создать новый, пустой стиль заданного StyleType
StyleCollection.AddCopy(style)Скопировать существующий стиль в эту коллекцию
StyleTypeПеречисление, различающее стили Paragraph, Character, Table и List
StyleIdentifierИдентификатор, не зависящий от локали, для встроенного стиля
TableStyleПодкласс Style для форматирования таблиц, включая условное стилизование по-регионно
ConditionalStyleCollectionНабор по-регионных записей ConditionalStyle на TableStyle
ConditionalStyleФорматирование (шрифт, формат абзаца, затенение, границы, отступы) для одного региона таблицы
ConditionalStyleTypeПеречисление, определяющее, к какому региону таблицы применяется ConditionalStyle

См. также:

 Русский