6 de julho de 2009

Incluindo gráfico numa planilha Excel com scripts

Publiquei em junho uma série de posts sobre como automatizar a criação de planilhas Excel através de VBScript. Inclui informações sobre os principais objetos do Excel, um exemplo de como criar uma planilha básica, exemplo mostrando formatação de planilhas e criação de fórmulas, tudo utilizando scripts. Dentro do que eu tinha proposto, faltou incluir informações e exemplo sobre como trabalhar com gráficos numa planilha.

Para isso, vou incrementar o cenário descrito nos outros posts e o exemplo incluído neles. O objetivo é criar um gráfico de linhas que mostre a evolução por dia dos valores das colunas Mês 1 e Mês 2, conforme criados naqueles exemplos.

Há duas formas de se ter gráficos numa planilha: incluir uma nova folha de trabalho que contenha um gráfico ou embutir um Chart dentro de um Worksheet já existente. Vou usar aqui este último método mas, do ponto de vista dos scripts, há poucas diferenças entre um e outro.

Dentro do objeto WorkSheet há uma propriedade chamada Shapes que permite gerenciar todos os objetos desenhados dentro da folha, tais como AutoShapes, FreeForms, imagens e objetos OLE. Como os gráficos são objetos OLE, podem ser facilmente inseridos na folha usando Shapes. O método AddChart do Shapes serve para isso e aceita como parâmetros o tipo de gráfico a ser criado e o posicionamento do gráfico dentro da folha. Apesar do nome da função ser AddChart, o objeto resultante é, na verdade, um Shape. Para obter o gráfico propriamente dito, usamos a propriedade Chart do Shape criado. Veja o exemplo:
Dim grafico
Set grafico = folha.Shapes.AddChart (4, 200, 10).Chart

O número 4 passado como parâmetro indica que o tipo de gráfico a ser criado é o de linhas. Para mais informações sobre os códigos dos tipos válidos, veja a documentação do enumerado XlChartType. Os outros dois números indicam a posição em pontos (pixels) do canto superior esquerdo (a esquerda e o topo, respectivamente) do gráfico. Vou deixar que o próprio Excel calcule o comprimento e altura mas também estes valores poderiam ter sido informados como parâmetros.

O próximo passo é informar ao Excel quais são os dados a serem considerados pelo gráfico. Agora que tenho a variável grafico do tipo Chart posso usar os métodos dessa classe para fazer todas as configurações necessárias. Os dados, por exemplo, consigo ajustar com a função SetSourceData.
grafico.SetSourceData folha.Range("A1:C31"), 2

Com esse comando, o gráfico é configurado para mostrar os dados existentes nas colunas A, B e C, linhas 1 a 31. O número 2 no segundo parâmetro indica que as séries devem ser criadas usando colunas (veja o enumerado XlRowCol) de modo que a primeira coluna (A) contém os valores para o eixo horizontal do gráfico e as outras duas colunas B e C são as séries de dados propriamente ditas. Obs: a Coluna A foi alimentada com os dias e as colunas B e C têm valores para os meses 1 e 2.

O código abaixo faz outras configurações e formatações ao gráfico, como acrescentar Legendas na parte de baixo e um título:
grafico.HasTitle = True
grafico.HasLegend = True
grafico.ChartTitle.Text = "Distribuição por Mês"
grafico.Legend.Position = -4107 ' xlLegendPositionBottom

Como já havia falado em outro post, tudo que você consegue fazer com o Excel através da interface visual você também consegue fazer através de script.

Dica: Uma boa forma de se descobrir como implementar por script uma sequência de passos dentro do Excel é gravar uma macro. Ligue o gravador de macros e execute a sequência de passos desejada. Depois que encerrar a gravação, edite o código VBA gerado para ver as funções que foram chamadas.

Estou usando o Office 2007 para essas implementações mas acredito que não haja diferenças importantes na forma de trabalhar.

O VBScript com o exemplo completo - incluindo os conceitos e exemplos dos outros posts meus - pode ser baixado aqui.

Nenhum comentário :

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.