Trabalhando com Estilos
Trabalhando com Estilos
Este guia mostra como trabalhar com estilos de parágrafo, caractere, tabela e lista em Aspose.Words FOSS para .NET — pesquisando e aplicando estilos incorporados e personalizados, e configurando formatação condicional por região nos estilos de tabela.
Um objeto Style representa um único estilo incorporado ou definido pelo usuário — a coleção nomeada de formatação de parágrafo, fonte e lista que o Word aplica quando um parágrafo ou trecho recebe esse estilo. Cada documento expõe seus estilos através da propriedade Document.Styles, que retorna um StyleCollection. Os estilos de tabela são representados por TableStyle, uma subclasse de Style que adiciona formatação específica de tabela e formatação condicional por região através de ConditionalStyleCollection.
Tipos de Estilo e Identificação
Cada Style possui uma propriedade Type do tipo StyleType, que pode ser Paragraph, Character, Table ou List — correspondendo aos quatro tipos de estilos que o Word oferece. Estilos incorporados também carregam um valor enum StyleIdentifier independente de localidade (por exemplo, valores correspondentes a estilos de título, ênfase e hyperlink) para que o código possa localizar um estilo incorporado sem depender de seu nome exibido em um idioma específico. O nome legível por humanos de um estilo está disponível através de Style.Name, e Style.Aliases devolve quaisquer nomes alternativos que o Word reconheça para o mesmo estilo. Style.BuiltIn indica se o estilo é fornecido com o próprio Word ou se foi definido no documento, e Style.IsHeading indica se o estilo é um dos estilos de título incorporados.
Acessando e Gerenciando a Coleção de Estilos
StyleCollection é a coleção de todos os objetos Style — incorporados e personalizados — vinculados a um documento, acessada através de Document.Styles. Recupere um estilo pelo seu nome exibido usando o indexador StyleCollection — styles[name] — ou recupere um estilo incorporado pelo seu StyleIdentifier independente de localidade usando o mesmo indexador — styles[sti] — o que é mais confiável que a pesquisa por nome em documentos criados em diferentes idiomas. Novos estilos são criados com StyleCollection.Add(type, name), especificando o StyleType e um nome, e um estilo existente pode ser duplicado na coleção com StyleCollection.AddCopy(style). StyleCollection.Count informa quantos estilos o documento contém, e a coleção também expõe DefaultFont e DefaultParagraphFormat, que descrevem a formatação padrão do documento que o novo conteúdo herda antes que qualquer estilo explícito seja aplicado. StyleCollection.ClearQuickStyleGallery() remove todos os estilos da galeria de estilos rápidos da interface do Word sem excluir os próprios estilos.
Aplicando Estilos a Parágrafos e Trechos
Objetos de formatação que podem conter um estilo expõem tanto uma propriedade Style (o próprio objeto Style) quanto uma propriedade StyleName (um atalho que resolve ou cria um estilo por nome). ParagraphFormat.Style e ParagraphFormat.StyleName aplicam um estilo de parágrafo, enquanto Font.Style e Font.StyleName aplicam um estilo de caractere à formatação de um trecho. As próprias propriedades LinkedStyleName, BaseStyleName e NextParagraphStyleName de um estilo descrevem como ele se relaciona a outros estilos: BaseStyleName nomeia o estilo do qual herda formatação não definida, LinkedStyleName nomeia um estilo de parágrafo/caractere emparelhado (como o Word faz para estilos internos como Título 1 e seu estilo de caractere vinculado), e NextParagraphStyleName nomeia o estilo que o Word atribui a um novo parágrafo digitado após um que usa esse estilo.
Estilos de Tabela e Formatação Condicional
TableStyle estende Style com propriedades de layout de tabela como Alignment, CellSpacing, LeftIndent, Shading, VerticalAlignment e preenchimento (LeftPadding, RightPadding, TopPadding, BottomPadding), além de RowStripe e ColumnStripe, que controlam quantas linhas ou colunas um padrão de banding se repete. Além da formatação uniforme de tabelas, TableStyle.ConditionalStyles devolve um ConditionalStyleCollection contendo um ConditionalStyle por região da tabela — FirstRow, LastRow, FirstColumn, LastColumn, OddRowBanding, EvenRowBanding, OddColumnBanding, EvenColumnBanding e as quatro células de canto (TopLeftCell, TopRightCell, BottomLeftCell, BottomRightCell). Cada ConditionalStyle possui seus próprios Font, ParagraphFormat, Shading, Borders e preenchimento de célula, e sua propriedade Type indica qual região ConditionalStyleType ela representa. ConditionalStyle.ClearFormatting() e ConditionalStyleCollection.ClearFormatting() redefinem a formatação para uma região ou para todo o conjunto de regiões condicionais.
Metadados de Estilo e Bandeiras de Comportamento
Várias propriedades booleanas e numéricas em Style controlam como o Word trata um estilo em sua interface, em vez de como ele é renderizado: Locked impede que o estilo seja alterado quando a proteção de formatação está ativa, IsQuickStyle controla se ele aparece na galeria de estilos rápidos, AutomaticallyUpdate faz o estilo redefinir a si mesmo a partir de formatação direta aplicada manualmente, SemiHidden e UnhideWhenUsed controlam a visibilidade na lista de estilos antes e depois do primeiro uso, e Priority afeta a ordem de classificação na galeria. Um estilo também expõe as propriedades List e ListFormat quando define a numeração de lista, e Style.Remove() exclui o estilo de seu StyleCollection.
Dicas e Melhores Práticas
- Prefira o indexador
StyleCollectioncom um valorStyleIdentifierem vez de procurar por nome ao localizar um estilo interno — os nomes são localizados, mas os valoresStyleIdentifiernão são. - Defina
BaseStyleNamepara criar hierarquias de estilos (por exemplo, um conjunto de estilos de título que todos herdam as escolhas de fonte de um estilo base) em vez de repetir a formatação em cada estilo. - Ao copiar um estilo entre documentos, use
StyleCollection.AddCopy(style)em vez de ler manualmente e reaplicar cada propriedade de formatação. - Configure regiões
TableStyle.ConditionalStylespara tabelas com faixas em vez de formatar manualmente linhas alternadas no código — a formatação de cada regiãoConditionalStyleé aplicada com base no seuConditionalStyleType, ao invés de definir formatação direta nas linhas individuais. - Verifique
Style.BuiltInantes de remover ou renomear um estilo programaticamente; estilos incorporados geralmente são referenciados por nome em outras partes do documento.
Problemas comuns
| Problema | Causa | Correção |
|---|---|---|
StyleCollection indexer retorna null para uma pesquisa de nome | O nome do estilo não existe neste documento, ou um estilo incorporado ainda não foi usado, de modo que o Word ainda não o materializou | Verifique Style.Aliases para nomes alternativos, ou use o indexador StyleCollection com um StyleIdentifier para estilos incorporados |
Definir StyleName inesperadamente cria um novo estilo | StyleName cria o estilo nomeado se ele ainda não existir na coleção | Use o indexador StyleCollection primeiro para confirmar que o estilo existe, ou atribua o objeto Style diretamente via a propriedade Style |
O banding da tabela não aparece após aplicar um TableStyle | As regiões de formatação condicional (OddRowBanding, EvenRowBanding, e assim por diante) nunca foram configuradas em TableStyle.ConditionalStyles | Defina a formatação nas entradas relevantes de ConditionalStyle em ConditionalStyleCollection |
| Uma alteração de estilo não afeta o conteúdo que já usa o estilo | A formatação direta (manual) foi aplicada sobre o estilo e tem precedência | Limpe a formatação direta nas execuções/parágrafos afetados, ou defina Style.AutomaticallyUpdate |
FAQ
Como obtenho a coleção de todos os estilos em um documento?
Leia Document.Styles, que retorna um StyleCollection contendo todos os Style incorporados e definidos pelo usuário naquele documento.
Qual é a diferença entre Style e StyleIdentifier?
Style é o objeto de estilo real com sua formatação; StyleIdentifier é um valor enum independente de local usado para procurar um específico embutido estilo independentemente do idioma do documento, via o StyleCollection indexador.
Como os estilos de tabela diferem dos estilos de parágrafo ou de caractere?
TableStyle é uma subclasse de Style que adiciona propriedades de layout de tabela (Alignment, CellSpacing, padding) e uma coleção ConditionalStyles para formatação específica de região, como linhas em faixas, linhas de cabeçalho e células de canto — conceitos de formatação que não se aplicam a estilos de parágrafo ou de caractere.
Posso criar um estilo totalmente novo em vez de modificar um existente?
Sim — chame StyleCollection.Add(type, name) com o StyleType desejado e um novo nome para criar um estilo vazio, então defina suas propriedades de formatação (Font, ParagraphFormat, e assim por diante para estilos de parágrafo/caractere).
Como duplico um estilo, incluindo de outro documento?
Use StyleCollection.AddCopy(style), passando um objeto Style (que pode vir de um StyleCollection de um Document diferente) para adicionar uma cópia dele à coleção de destino.
API Reference Resumo
| Classe/Método | Descrição |
|---|---|
Style | Um único estilo de parágrafo, caractere, tabela ou lista, incorporado ou definido pelo usuário |
StyleCollection | A coleção de todos os estilos em um documento, acessada via Document.Styles |
Indexador de StyleCollection por nome | Localize um estilo pelo seu nome de exibição, por exemplo styles["Heading 1"] |
Indexador de StyleCollection por identificador | Localize um estilo incorporado por identificador independente de local, por exemplo styles[StyleIdentifier.Heading1] |
StyleCollection.Add(type, name) | Crie um novo estilo vazio do StyleType fornecido |
StyleCollection.AddCopy(style) | Copie um estilo existente para esta coleção |
StyleType | Enum que distingue estilos Paragraph, Character, Table e List |
StyleIdentifier | Identificador independente de localidade para um estilo embutido |
TableStyle | Uma subclasse Style para formatação de tabelas, incluindo estilização condicional por região |
ConditionalStyleCollection | O conjunto de entradas ConditionalStyle por região em um TableStyle |
ConditionalStyle | Formatação (fonte, formato de parágrafo, sombreamento, bordas, preenchimento) para uma região de tabela |
ConditionalStyleType | Enum identificando a qual região da tabela um ConditionalStyle se aplica |