C# - Criando e visualizando Gráficos no PowerPoint - I
No artigo de hoje vou mostrar como podemos criar gráficos básicos usando os recursos da .NET Presentation library e linguagem C#. |
A Spire.Presentantion for .NET é um componente profissiona compatível com o PowerPoint que permite criar, ler, escrever e modificvar documentos PowerPoint. Como um componente independente do PowerPoint, o Spire.Presentation não precisa do Microsoft PowerPoint instalado na máquina.
No exemplo vou mostrar como criar um gráfico de colunas e um gráfico de Pizza e também como visualizar o gráfico gerado no PowerPoint.(precisa ter o programa instalado)
Recursos usados:
Criando o projeto no Visual Studio 2017 Community
Abra o VS 2017 Community e clique em New Project;
Selecione a linguagem Visual C# -> Windows Classic Desktop e o template Windows Forms App(.NET Framework);
Informe o nome CShp_GraficosPP e clique no botão OK;
Após criar o projeto vamos incluir a referência à biblioteca Spire.Presentation via Nuget.
No menu Tools em Nuget Package Manager clique em Manage Nuget Packages for Solution e escolha a biblioteca conforme mostra a figura a seguir:
Além disso vamos incluir uma referência ao Microsoft.Office.Core e Microsoft.Office.Interop.PowerPoint no projeto pois vamos exibir o gráfico gerado no PowerPoint. Use a opção Add Reference do menu Project.
A seguir inclua no formulário Form1.cs os seguintes controles:
1 PictureBox - logo do powerpoint
2 Labels
2 TextBox - txtNomeGrafico e txtLocal
1 Painel
3 Buttons - btnGraficoBarras, btnGraficoPizza e btnEncerrar
Disponha os controles no formulário segundo o leiaute da figura abaixo:
Namespaces usados no formulário :
using System;
using Spire.Presentation;
using System.Drawing;
using Spire.Presentation.Charts;
using System.Data;
using Spire.Presentation.Drawing;
using System.Windows.Forms;
using Microsoft.Office.Core;
Definindo o Código do Formulário
Vamos definir o código em cada evento Click dos botões de comando:
1 - No evento Click do botão - Gráfico de Barras - define o código abaixo:
private void btnGraficoBarras_Click(object sender, EventArgs e)
{
try
{
//Cria um documento PowerPoint
Presentation presentation = new Presentation();
//inclui um grafico de coluna
RectangleF rect = new RectangleF(40, 100, 550, 320);
IChart chart = presentation.Slides[0].Shapes.AppendChart(ChartType.ColumnClustered, rect);
//define o titulo
chart.ChartTitle.TextProperties.Text = "Masculino/Feminino Por Setor";
chart.ChartTitle.TextProperties.IsCentered = true;
chart.ChartTitle.Height = 30;
chart.HasTitle = true;
//define um array de strings bidimensional
string[,] data = new string[,]
{
{"Setor","Masculino","Feminino" },
{"Contabilidade","7","3"},
{"RH","5","10" },
{"Vendas","17","13" },
{"Informática","15","9" },
{"Atendimento","20","15" }
};
// escreve os dados no grafico
for (int i = 0; i < data.GetLength(0); i++)
{
for (int j = 0; j < data.GetLength(1); j++)
{
int number;
bool result = Int32.TryParse(data[i, j], out number);
if (result)
{
chart.ChartData[i, j].Value = number;
}
else
{
chart.ChartData[i, j].Value = data[i, j];
}
}
}
//define as legendas da serie
chart.Series.SeriesLabel = chart.ChartData["B1", "C1"];
//define a legendas das categorias
chart.Categories.CategoryLabels = chart.ChartData["A2", "A5"];
//define os valores das series
chart.Series[0].Values = chart.ChartData["B2", "B5"];
chart.Series[1].Values = chart.ChartData["C2", "C5"];
//aplica o estilo do grafico
chart.ChartStyle = ChartStyle.Style11;
//define a sobreposicao
chart.OverLap = -50;
//define a largura
chart.GapWidth = 200;
var localArquivo = Path.Combine(@txtLocal.Text, txtNomeGrafico.Text);
//salva o arquivo e exibe no powerpoint se desejar
presentation.SaveToFile(localArquivo, FileFormat.Pptx2010);
if (MessageBox.Show("Grafico : " + localArquivo + " Criado em salvo com sucesso. Deseja Visualizar o Arquivo ?",
"Grafico", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
AbrirArquivo(localArquivo);
}
}
catch(Exception ex)
{
MessageBox.Show("Erro : " + ex.Message);
}
}
|
Para exibir o gráfico gerado no PowerPoint estamos chamando o método AbrirArquivo() passando o nome do arquivo :
private void AbrirArquivo(string localArquivo)
{
Microsoft.Office.Interop.PowerPoint.Application pptApp = new Microsoft.Office.Interop.PowerPoint.Application();
MsoTriState ofalse = MsoTriState.msoFalse;
MsoTriState otrue = MsoTriState.msoTrue;
pptApp.Visible = otrue;
pptApp.Activate();
Microsoft.Office.Interop.PowerPoint.Presentations ps = pptApp.Presentations;
Microsoft.Office.Interop.PowerPoint.Presentation p = ps.Open(@localArquivo, ofalse, ofalse, otrue);
System.Diagnostics.Debug.Print(p.Windows.Count.ToString());
MessageBox.Show(pptApp.ActiveWindow.Caption);
}
|
O código acima usa as referências ao Microsoft.Office.Interop.PowerPoint para criar um objeto PowerPoint e exibir o gráfico.
2 - Código do evento Click do botão de comando - Gráfico de Pizza - inclua o código a seguir:
private void btnGraficoPizza_Click(object sender, EventArgs e)
{
try
{
//cria documento PowerPoint
Presentation ppt = new Presentation();
//inclui um gráfico de pizza
RectangleF rect1 = new RectangleF(40, 100, 550, 320);
IChart chart = ppt.Slides[0].Shapes.AppendChart(ChartType.Pie, rect1, false);
//define o titulo
chart.ChartTitle.TextProperties.Text = "Vendas Trimestrais";
chart.ChartTitle.TextProperties.IsCentered = true;
chart.ChartTitle.Height = 30;
chart.HasTitle = true;
//define dados de exemplo e atribuir ao grafico
string[] trimestres = new string[] { "1o. Trim.", "2o. Trim.", "3o. Trim.", "4o. Trim." };
int[] vendas = new int[] { 210, 320, 180, 500 };
chart.ChartData[0, 0].Text = "Trimestres";
chart.ChartData[0, 1].Text = "Vendas";
for (int i = 0; i < trimestres.Length; ++i)
{
chart.ChartData[i + 1, 0].Value = trimestres[i];
chart.ChartData[i + 1, 1].Value = vendas[i];
}
//define as etiquetas das series
chart.Series.SeriesLabel = chart.ChartData["B1", "B1"];
//define as categorias das series
chart.Categories.CategoryLabels = chart.ChartData["A2", "A5"];
//define os valores das series
chart.Series[0].Values = chart.ChartData["B2", "B5"];
//define os pontes para as series e preenche cada
//uma com uma cor diferente
for (int i = 0; i < chart.Series[0].Values.Count; i++)
{
ChartDataPoint cdp = new ChartDataPoint(chart.Series[0]);
cdp.Index = i;
chart.Series[0].DataPoints.Add(cdp);
}
chart.Series[0].DataPoints[0].Fill.FillType = FillFormatType.Solid;
chart.Series[0].DataPoints[0].Fill.SolidColor.Color = Color.LightBlue;
chart.Series[0].DataPoints[1].Fill.FillType = FillFormatType.Solid;
chart.Series[0].DataPoints[1].Fill.SolidColor.Color = Color.DarkGray;
chart.Series[0].DataPoints[2].Fill.FillType = FillFormatType.Solid;
chart.Series[0].DataPoints[2].Fill.SolidColor.Color = Color.MediumPurple;
chart.Series[0].DataPoints[3].Fill.FillType = FillFormatType.Solid;
chart.Series[0].DataPoints[3].Fill.SolidColor.Color = Color.DarkOrange;
//define legendas para exibir o valor e o percentual
chart.Series[0].DataLabels.LabelValueVisible = true;
chart.Series[0].DataLabels.PercentValueVisible = true;
var localArquivo = Path.Combine(@txtLocal.Text, txtNomeGrafico.Text);
ppt.SaveToFile(localArquivo, FileFormat.Pptx2010);
if (MessageBox.Show("Grafico : " + localArquivo + " Criado em salvo com sucesso. Deseja Visualizar o Arquivo ?",
"Grafico", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
AbrirArquivo(localArquivo);
}
}
catch (Exception ex)
{
MessageBox.Show("Erro : " + ex.Message);
}
}
}
|
Agora vamos executar o projeto e exibir cada um dos gráficos gerados no PowerPoint:
Gráfico de barras | Gráfico de Pizza |
Na próxima parte do artigo veremos como combinar dois tipos de gráfico.
Pegue o projeto completo aqui : CShp_GraficosPP.zip (sem as referências)
Disseram-lhe, pois: Onde está teu Pai? Jesus respondeu: Não me conheceis a mim,
nem a meu Pai; se vós me conhecêsseis a mim, também conheceríeis a meu Pai.
João 8:19
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Criando gráficos no VB 2010 Express Edition II - Macoratti.net
VB .NET - Exibindo dados em um Gráfico (revisão) - Macoratti.net