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#.


No artigo de hoje vamos usar os recursos da biblioteca .NET Presentation library que iremos referenciar em um projeto C# via Nuget.

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:

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:


José Carlos Macoratti