C# -  Criando e visualizando Gráficos no PowerPoint - II


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 continuar a usar os recursos da biblioteca .NET Presentation library, que iniciamos no artigo anterior, mostrando como combinar dois tipos de gráficos.

Recursos usados:

Usando o projeto criado no Visual Studio 2017 Community

Abra o projeto criado no artigo anterior e inclua um novo botão de comando no formulário :

Disponha o novo controle no formulário segundo o leiaute da figura abaixo:

Agora vamos ao código usado para implementar o gráfico.

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 no evento Click do novo botão de comando - Gráfico Combinado:

       private void btnGraficoCombinado_Click(object sender, EventArgs e)
        {
            try
            {
                //Cria um documento PowerPoint
                Presentation presentation = new Presentation();
                //inclui um gráfico 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 = "Relatório Mensal de Vendas";
                chart.ChartTitle.TextProperties.IsCentered = true;
                chart.ChartTitle.Height = 30;
                chart.HasTitle = true;
                //cria um objeto datatable com dados
                DataTable dataTable = new DataTable();
                dataTable.Columns.Add(new DataColumn("Mês", Type.GetType("System.String")));
                dataTable.Columns.Add(new DataColumn("Vendas", Type.GetType("System.Int32")));
                dataTable.Columns.Add(new DataColumn("Taxa Crescimento", Type.GetType("System.Decimal")));
                dataTable.Rows.Add("Janeiro", 200, 0.6);
                dataTable.Rows.Add("Fevereiro", 250, 0.8);
                dataTable.Rows.Add("Março", 300, 0.6);
                dataTable.Rows.Add("Abril", 150, 0.2);
                dataTable.Rows.Add("Maio", 200, 0.5);
                dataTable.Rows.Add("Junho", 400, 0.9);
                //importa os dados do datatabel para o grafico
                for (int c = 0; c < dataTable.Columns.Count; c++)
                {
                    chart.ChartData[0, c].Text = dataTable.Columns[c].Caption;
                }
                for (int r = 0; r < dataTable.Rows.Count; r++)
                {
                    object[] datas = dataTable.Rows[r].ItemArray;
                    for (int c = 0; c < datas.Length; c++)
                    {
                        chart.ChartData[r + 1, c].Value = datas[c];
                    }
                }
                //define os rótulos das series
                chart.Series.SeriesLabel = chart.ChartData["B1", "C1"];
                //define os rotulos das categorias
                chart.Categories.CategoryLabels = chart.ChartData["A2", "A7"];
                //atribui dados às series
                chart.Series[0].Values = chart.ChartData["B2", "B7"];
                chart.Series[1].Values = chart.ChartData["C2", "C7"];
                //altera o tipo tipo de grafico da serie 2 para linha grafico de linha com marcadores
                chart.Series[1].Type = ChartType.LineMarkers;
                //plota os dados da serie 2 no eixo secundario
                chart.Series[1].UseSecondAxis = true;
                //define o formato do numero como percentual
                chart.SecondaryValueAxis.NumberFormat = "0%";
                //oculta as linhas de grade o eixo secundario
                chart.SecondaryValueAxis.MajorGridTextLines.FillType = FillFormatType.None;
                //define a sobreposição
                chart.OverLap = -50;
                //define o intervalo da largura
                chart.GapWidth = 200;
                //salva e exibe o arquivo gerado
                var localArquivo = Path.Combine(@txtLocal.Text, txtNomeGrafico.Text);
                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);
        }

Agora vamos executar o projeto e exibir o gráfico gerado como uma combinação de dois gráficos:

Gráfico Combinado

E assim temos os dois gráficos combinados.

Pegue o projeto completo aqui :   CShp_GraficosPP2.zip (sem as referências)

E a vida eterna é esta: que te conheçam, a ti só, por único Deus verdadeiro, e a Jesus Cristo, a quem enviaste. 
João 17:3

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