Робота зі стилями
Робота зі стилями
У цьому посібнику показано, як працювати з абзацовими, символьними, табличними та списковими стилями у 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 вказує назву стилю, від якого успадковується незаданe форматування, 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 є незалежним від локалі значенням enum, що використовується для пошуку конкретного вбудованого стилю незалежно від мови документа, через StyleCollection індексатор.
Чим стилі таблиць відрізняються від стилів абзаців або символів?
TableStyle — це підклас Style, який додає властивості розмітки таблиці (Alignment, CellSpacing, padding) і колекцію ConditionalStyles для регіонального форматування, такого як смугові рядки, заголовкові рядки та кутові клітинки — концепції форматування, які не застосовуються до стилів абзаців або символів.
Чи можу я створити зовсім новий стиль замість того, щоб змінювати існуючий?
Так — викличте StyleCollection.Add(type, name) з потрібним StyleType і новою назвою, щоб створити порожній стиль, потім встановіть його властивості форматування (Font, ParagraphFormat і так далі для стилів абзаців/символів).
Як я можу дублювати стиль, включаючи його з іншого документа?
Використайте StyleCollection.AddCopy(style), передавши об’єкт Style (який може походити з іншого Document’s StyleCollection) для додавання його копії до цільової колекції.
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 | Enum, який визначає, до якого регіону таблиці застосовується ConditionalStyle |