15 de junho de 2009

Formatando planilhas Excel através de programação

Já descrevi em posts anteriores como automatizar a leitura e a criação de planilhas Excel, bem como fiz um overview dos principais objetos que compõem a estrutura dessa ferramenta. Agora, vou mostrar objetos auxiliares para formatar o conteúdo das planilhas.

Há diversas partes de uma célula ou de um grupo de células (Range) que podem ser formatadas. Essa formatação inclui o tipo de letra (fontes), formato de apresentação para números e datas, bordas, cor de fundo, etc.

Usando como exemplo a planilha do post sobre criação de planilhas, o código abaixo mostra uma parte da formatação de um cabeçalho:
folha.Cells (1,"B") = "Mês 1"
folha.Cells (1,"C") = "Mês 2"
folha.Range ("B1:C1").ColumnWidth = 12
folha.Range ("B1:C1").Interior.Color = RGB(210, 220, 255)
folha.Range ("B1:C1").Interior.Pattern = 1 'xlPatternSolid

A propriedade Interior, que é acessível através através de um Range, representa a parte interna de cada célula contida no Range, permitindo configurar a cor de fundo e o padrão de preenchimento dessas células. Usei também a propriedade ColumnWidth do Range para modificar o comprimento das 2 colunas utilizadas.

Outro objeto importante para a formatação é o Font, que permite modificar a aparência das letras de cada célula. No trecho abaixo, instruo o Excel para que use o tipo de Fonte Arial Bold com tamanho 14 na faixa de células que engloba as colunas B e C da primeira linha.
folha.Range ("B1:C1").Font.Name = "Arial"
folha.Range ("B1:C1").Font.Bold = True
folha.Range ("B1:C1").Font.Size = 14

Use o objeto Borders para modificar simultaneamente a aparência das 4 bordas de todas as céulas de um Range. Para configurar bordas de forma independente, use a propriedade Items usando como índice um dos valores do enumerado XlBordersIndex.
folha.Range ("B1:C31").Borders.LineStyle = 1 'xlContinuous
folha.Range ("B1:C31").Borders.Weight = 2 'xlThin
folha.Range ("B1:C31").Borders.Color = RGB(0,0,0)
' Linha embaixo do cabeçalho mais grossa
' (xlEdgeBottom = 9)
folha.Range ("B1:C1").Borders(9).Weight = 4

Na primeira parte, indico que quero bordas em todas as células pertencentes à àrea que vai da linha 1 à 31, colunas B e C. Essa é a região que foi alimentada no outro post. Na última linha desse trecho, indico que a borda inferior da área que é meu cabeçalho deve ter uma linha mais grossa. Como Items é a propriedade padrão de Borders, não é preciso explicitá-la no script, embora outras linguagens possam exigir isso.

Há no Range ainda uma propriedade para configurar o formato de apresentação do conteúdo das células. Trata-se de NumberFormat, que aceita como valor um texto representando a formatação desejada.
folha.Range ("B1:C1").NumberFormat = "General"
folha.Range ("B2:C31").NumberFormat = "#,##0.00_);[Red](#,##0.00)"
folha.Range ("B1:C31").HorizontalAlignment = 4 ' xlRight

Neste exemplo, "General" indica que o contéudo é um texto simples. Já a sequência #,##0.00_) significa que o Excel deve formatar as células indicadas no Range com 2 casas decimais, que não deve mostrar zeros à esquerda e que deve usar o separador de milhar para números maiores que 999. O que está depois do ponto-e-vírgula é a formatação a ser usada caso o valor da célula seja negativo.

Mais uma vez, esse exemplo foi construído com a versão 2007 do Office e pode ser necessário modificar uma ou outra linha do código para trabalhar com versões anteriores.

Volto depois com o uso de fórmulas e outros detalhes. Clique aqui para fazer o download do exemplo.

Mais Informações
Modelo de objetos do Excel, Leitura e Gravação de planilhas Excel através de scripts, objeto Interior, objeto Font, objeto Borders.

4 comentários :

Gean carlos disse...

Cara valeu seus exemplos me ajudaram com duvidas que tinha no Delphi....
Parabens.

Gean

maurozb disse...

Muito obrigado!
Me ajudou muito!

Alberto disse...

Valeu !!! Ajudou muito. Muito bom seu artigo!!

Att. Alberto Boller

Alberto disse...

Muito Bom artigo !
Ajudou muito !!

Obrigado.

Postar um comentário

OBS: Os comentários enviados a este Blog são submetidos a moderação. Por isso, eles serão publicados somente após aprovação.

Observação: somente um membro deste blog pode postar um comentário.