Как работать со стилями в .NET
Это руководство показывает, как искать, применять и создавать стили абзацев, символов, таблиц и списков в Aspose.Words FOSS для .NET, используя Style, StyleCollection, и TableStyle классы. Оно охватывает чтение коллекции стилей документа, надёжный поиск стилей в разных языках, применение стилей к абзацам и run, создание и копирование стилей, а также настройку условного форматирования по регионам для стилей таблиц.
Пошаговое руководство
Шаг 1: Установите пакет
Aspose.Words FOSS for .NET ещё не публикует пакет NuGet — вместо этого соберите библиотеку из исходного кода. Клонируйте https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git, затем соберите Aspose.Words.sln в конфигурации Release с помощью .NET SDK и подключите полученную сборку Aspose.Words к вашему проекту. Библиотека нацелена на .NET Standard 2.0, поэтому она работает на .NET Framework 4.6.2+ и .NET 6/8/10.
Шаг 2: Импортируйте необходимые классы
Добавьте директиву using Aspose.Words; — Style, StyleCollection, TableStyle, StyleType, StyleIdentifier, ConditionalStyle, ConditionalStyleCollection и ConditionalStyleType находятся в пространстве имён Aspose.Words рядом с Document.
Шаг 3: Прочитать коллекцию стилей документа
Document.Styles возвращает StyleCollection — каждый встроенный и пользовательский Style, прикреплённый к документу. StyleCollection.Count сообщает, сколько стилей он содержит, а DefaultFont / DefaultParagraphFormat описывают форматирование по умолчанию для всего документа, которое наследует новое содержимое до применения какого-либо явного стиля.
Шаг 4: Надёжно искать стиль
Получите стиль по его отображаемому имени, используя индексатор StyleCollection, styles[name]. Для встроенных стилей предпочтительно использовать тот же индексатор с перечислением StyleIdentifier — styles[sti] — имена локализованы, но значения StyleIdentifier нет, поэтому поиск по идентификатору работает одинаково независимо от языка документа. Проверьте Style.Aliases на наличие альтернативных имен, которые Word распознаёт для того же стиля, если индексатор не находит ожидаемое, и проверьте Style.BuiltIn перед программным удалением или переименованием стиля, так как встроенные стили часто упоминаются по имени в других частях документа.
Шаг 5: Применить стиль к абзацам или диапазонам
Объекты форматирования, несущие стиль, предоставляют как свойство Style (сам объект Style), так и свойство StyleName (ярлык, который разрешает или создаёт стиль по имени). Установите ParagraphFormat.Style или ParagraphFormat.StyleName, чтобы применить стиль абзаца, и Font.Style или Font.StyleName, чтобы применить стиль символов к форматированию диапазона. Присвоение StyleName имени, которого ещё нет в коллекции, создаёт этот стиль — сначала проверьте существование стиля с помощью индексатора StyleCollection, или присвойте объект Style напрямую, если это не ожидаемое поведение.
Шаг 6: Создавать иерархии стилей
Прочитайте BaseStyleName, чтобы найти стиль, от которого данный стиль наследует неустановленное форматирование, LinkedStyleName для парного стиля абзаца/символа (как Word определяет для встроенных стилей, например, заголовка и связанного с ним стиля символов), и NextParagraphStyleName для стиля, который Word назначает новому абзацу, набранному после абзаца, использующего этот стиль. Установите BaseStyleName при определении набора связанных стилей — например, семейства стилей заголовков, которые все должны наследовать выбор шрифта от одного базового стиля — вместо повторения одинакового форматирования в каждом стиле.
Шаг 7: Создать или скопировать стиль
Вызовите StyleCollection.Add(type, name) с StyleType (Paragraph, Character, Table или List) и именем, чтобы создать новый пустой стиль, затем при необходимости задайте его свойства Font и ParagraphFormat. Чтобы дублировать существующий стиль — в том числе из StyleCollection другого Document — вызовите StyleCollection.AddCopy(style), а не вручную считывать и повторно применять каждое свойство форматирования. Вызовите Style.Remove(), чтобы удалить стиль из его коллекции.
Шаг 8: Настроить стили таблиц и условное форматирование
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 регион он представляет; задавайте форматирование этим регионам, а не отдельным строкам таблицы, чтобы получить чередующееся, заголовочное или угловое форматирование, сохраняющееся при изменениях таблицы.
Шаг 9: Сбросить или удалить форматирование
Вызовите ConditionalStyle.ClearFormatting(), чтобы сбросить один условный регион, или ConditionalStyleCollection.ClearFormatting(), чтобы одновременно сбросить все регионы в TableStyle. StyleCollection.ClearQuickStyleGallery() удаляет все стили из галереи быстрых стилей интерфейса Word, не удаляя сами стили — полезно для сокращения галереи без изменения содержимого документа.
Типичные проблемы и их решения
StyleCollection indexer возвращает null при поиске имени Имя стиля не существует в этом документе, либо встроенный стиль ещё не использовался, поэтому Word его не материализовал. Проверьте Style.Aliases на наличие альтернативных имён, или используйте the StyleCollection indexer с StyleIdentifier для встроенных стилей вместо этого.
Установка StyleName неожиданно создаёт новый стиль StyleName создаёт именованный стиль, если он ещё не существует в коллекции. Используйте StyleCollection indexer сначала, чтобы подтвердить существование стиля, или назначить Style объект напрямую через Style свойство вместо StyleName.
Полосатость таблицы не отображается после применения TableStyle Условные области форматирования – OddRowBanding, EvenRowBanding, и аналогичные – никогда не были настроены в TableStyle.ConditionalStyles. Установите форматирование для соответствующего ConditionalStyle записей в ConditionalStyleCollection.
Изменение стиля не влияет на контент, который уже использует этот стиль Прямое (ручное) форматирование, применяемое поверх стиля, имеет приоритет над настройками самого стиля. Очистите прямое форматирование в затронутых фрагментах или абзацах, или задайте Style.AutomaticallyUpdate так, чтобы стиль переопределил себя на основе этого ручного форматирования.
Встроенный поиск стиля не срабатывает в документе, написанном на другом языке The StyleCollection Индексатор сопоставляет по отображаемому имени, которое локализовано, при вызове с именем. Используйте тот же индексатор с соответствующим StyleIdentifier значением перечисления, поскольку этот идентификатор не зависит от локали.
Часто задаваемые вопросы
Как получить коллекцию всех стилей в документе?
Прочтите 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 — чтобы добавить его копию в целевую коллекцию.