C# - Criando um gráfico no Excel


Este tutorial vai mostrar como criar gráfico no Excel (estou usando a versão Excel 2007) usando a linguagem C#.

Recursos usados :

Vamos criar uma planilha Excel contendo alguns dados a partir do qual iremos gerar um gráfico de barras no Excel.

Na imagem abaixo temos o leiaute da planilha contendo os dados que iremos gerar;

A partir dos dados desta planilha iremos gerar o gráfico conforme mostrado na figura abaixo:

Agora abra o Visual C# 2010 Express Edition e no menu File clique em New Project selecionando o template Windows Forms Application com o nome : CriarGraficoExcel

A seguir no formulário padrão form1.cs inclua os seguintes controles:

Conforme o leiaute abaixo:

Vamos incluir uma referência em nosso projeto a biblioteca Microsoft.Office.Interop.Excel;

No menu Project clique em Add Reference;

Na janela Add Reference clique na guia COM e selecione : Microsoft Excel 12.0 Object Library e clique em OK;

Vamos definir o código do formulário form1.cs definindo os namespaces a serem usados :

using System;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;

A seguir vamos definir o código do evento Click do botão de comando conforme abaixo:

  private void btnGerarGrafico_Click(object sender, EventArgs e)
        {
            Excel.Application xlApp;
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            object misValue = System.Reflection.Missing.Value;

            xlApp = new Excel.Application();
            xlWorkBook = xlApp.Workbooks.Add(misValue);
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

            //incluindo dados
            xlWorkSheet.Cells[1, 1] = "";
            xlWorkSheet.Cells[1, 2] = "Macoratti";
            xlWorkSheet.Cells[1, 3] = "Miriam";
            xlWorkSheet.Cells[1, 4] = "Jeffersom";

            xlWorkSheet.Cells[2, 1] = "Matemática";
            xlWorkSheet.Cells[2, 2] = "80";
            xlWorkSheet.Cells[2, 3] = "65";
            xlWorkSheet.Cells[2, 4] = "45";

            xlWorkSheet.Cells[3, 1] = "Química";
            xlWorkSheet.Cells[3, 2] = "78";
            xlWorkSheet.Cells[3, 3] = "72";
            xlWorkSheet.Cells[3, 4] = "60";

            xlWorkSheet.Cells[4, 1] = "Física";
            xlWorkSheet.Cells[4, 2] = "82";
            xlWorkSheet.Cells[4, 3] = "80";
            xlWorkSheet.Cells[4, 4] = "65";

            xlWorkSheet.Cells[5, 1] = "Português";
            xlWorkSheet.Cells[5, 2] = "75";
            xlWorkSheet.Cells[5, 3] = "82";
            xlWorkSheet.Cells[5, 4] = "68";

            Excel.Range chartRange;

            Excel.ChartObjects xlCharts = (Excel.ChartObjects)xlWorkSheet.ChartObjects(Type.Missing);
            Excel.ChartObject myChart = (Excel.ChartObject)xlCharts.Add(10, 80, 300, 250);
            Excel.Chart chartPage = myChart.Chart;

            chartRange = xlWorkSheet.get_Range("A1", "d5");
            chartPage.SetSourceData(chartRange, misValue);
            chartPage.ChartType = Excel.XlChartType.xlColumnClustered;

            xlWorkBook.SaveAs(txtArquivoExcel.Text, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, 
Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
            xlWorkBook.Close(true, misValue, misValue);
            xlApp.Quit();

            liberarObjetos(xlWorkSheet);
            liberarObjetos(xlWorkBook);
            liberarObjetos(xlApp);

            MessageBox.Show("O arquivo Excel foi criado e pode ser aberto em  c:\\dados\\GraficoExcel.xls");
        }

Estamos criando um arquivo Excel com o nome e no caminho informados, inserindo alguns dados na planilha e gerando um gráfico de barras no Excel.

A rotina liberaObjetos() irá liberar os objetos criados e tem o seguinte código:

       private void liberarObjetos(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
                MessageBox.Show("Ocorreu um erro durante a liberação do objeto " + ex.ToString());
            }
            finally
            {
                GC.Collect();
            }
        }

Executando o projeto e clicando no botão de comando teremos:

Verificando a pasta c:\dados podemos constatar o arquivo GraficoExcel.xls criado:

Assim de forma bem simples mostramos como criar um arquivo .xls e gerar um gráfico simples no Excel usando a linguagem C#.

Obs: Para ler o arquivo Criado você pode usar o código abaixo. Ele exibirá o resultado em um controle DataGridView.

private void lerExcel()
{
            string connectionString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=NO;IMEX=1;""", txtArquivoExcel.Text);

            string query = String.Format("select * from [{0}$]", "Plan1");
            OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connectionString);
            DataSet dataSet = new DataSet();
            dataAdapter.Fill(dataSet);
            gdvExcel.DataSource = dataSet.Tables[0];
}

Pegue o projeto completo aqui:  CriarGraficoExcel.zip

Slm 126:1 Quando o Senhor trouxe do cativeiro os que voltaram a Sião, éramos como os que estão sonhando.

Slm 126:2 Então a nossa boca se encheu de riso e a nossa língua de cânticos. Então se dizia entre as nações: Grandes coisas fez o Senhor por eles.

Slm 126:3 Sim, grandes coisas fez o Senhor por nós, e por isso estamos alegres.

Slm 126:4 Faze regressar os nossos cativos, Senhor, como as correntes no sul.

Slm 126:5 Os que semeiam em lágrimas, com cânticos de júbilo segarão.

Slm 126:6 Aquele que sai chorando, levando a semente para semear, voltará com cânticos de júbilo, trazendo consigo os seus molhos.

Referências:


José Carlos Macoratti