Como gerar um Gráfico de Dispersão no Excel através do C# ?

Necessito criar um gráfico de dispersão no Excel, através do C#, porém não sei como criar!

OBS: será para criar um gráfico de uma função de 2° Grau

consigo passar o valor de Y, porém necessito do valor de X que pode ser calculado no próprio Excel ou pelo C#, porém é um calculo para cada valor de Y e que após ter os valores de X, possa criar o gráfico…

Já tenho o valor de Y padrão que é de -20 á 20

segue abaixo as linhas de códigos:

private void` button3_Click(object sender, EventArgs e)
           {
            Excel.Application oXL; //Aplicação Excel
            Excel._Workbook oWB; //Pasta
            Excel._Worksheet oSheet; //Planilha
            Excel.Range oRng;

            try
            {
                oXL = new Excel.Application();//Inicia o Excel  
                oXL.Visible = true;//fica Visivel para o usuário

                //Get a new workbook.
                oWB = (Excel._Workbook)(oXL.Workbooks.Add(Missing.Value));
                oSheet = (Excel._Worksheet)oWB.ActiveSheet;

                //Adiciona Cabeçalhos na célula
                oSheet.Cells[1, 1] = "Valor de A";//Valor de A
                oSheet.Cells[1, 2] = "Valor de B";//Valor de B
                oSheet.Cells[1, 3] = "Valor de C";//Valor de C

                //Formata as celulas A1:D1 como negrito, alinhamento centralizado
                oSheet.get_Range("A1", "D1").Font.Bold = true;
                oSheet.get_Range("A1", "D1").VerticalAlignment =
                    Excel.XlVAlign.xlVAlignCenter;

                // Cria um Array de string para passar o Valor de A,B e C
                string[,] ValorABC = new string[5,3];


                //as variáveis  'a', 'b' e 'c' recebem um valor numérico de um Textbox
                ValorABC[0, 0] = a.ToString();//Valor de A
                ValorABC[0, 1] = b.ToString();//Valor de B
                ValorABC[0, 2] = c.ToString();//Valor de C


                //Cria um Array para passar o Valor de Y que está entre -20 e 20
                string[,] ValorY = new string[50, 50];

                //ValorY[Linha, Coluna]
                ValorY[1, 0] = " -20"; ValorY[2, 0] = " -19"; ValorY[3, 0] = " -18"; ValorY[4, 0] = " -17"; ValorY[5, 0] = " -16"; ValorY[6, 0] = " -15";
                ValorY[7, 0] = " -14"; ValorY[8, 0] = " -13"; ValorY[9, 0] = " -12"; ValorY[10, 0] = " -11"; ValorY[11, 0] = " -10"; ValorY[12, 0] = " -9";
                ValorY[13, 0] = " -8"; ValorY[14, 0] = " -7"; ValorY[15, 0] = " -6"; ValorY[16, 0] = " -5"; ValorY[17, 0] = " -4"; ValorY[18, 0] = " -3"; 
                ValorY[19, 0] = " -2"; ValorY[20, 0] = " -1"; ValorY[21, 0] = " 0"; ValorY[22, 0] = " 1"; ValorY[23, 0] = " 2"; ValorY[24, 0] = " 3";
                ValorY[25, 0] = " 4"; ValorY[26, 0] = " 5"; ValorY[27, 0] = " 6"; ValorY[28, 0] = " 7"; ValorY[29, 0] = " 8"; ValorY[30, 0] = " 9";
                ValorY[31, 0] = " 10"; ValorY[32, 0] = " 11"; ValorY[33, 0] = " 12"; ValorY[34, 0] = " 13"; ValorY[35, 0] = " 14"; ValorY[36, 0] = " 15";
                ValorY[37, 0] = " 16"; ValorY[38, 0] = " 17"; ValorY[39, 0] = " 18"; ValorY[40, 0] = " 19"; ValorY[41, 0] = " 20";

                //Para pegar o valor de A, B e de C
                oSheet.get_Range("A2", "C2").Value2 = ValorABC;

                //Valor de Y na escala de -20 a 20 ficará entre H1:H50
                oSheet.get_Range("Y1", "Y42").Value2 = ValorY;

                //Tamanho automatico entre as colunas A1:C1
                oRng = oSheet.get_Range("A1", "C1");
                oRng.EntireColumn.AutoFit();

                //Manipulate a variable number of columns for Quarterly Sales Data.  ??????????????????
                //DisplayQuarterlySales(oSheet);

                oXL.Visible = true;//Deixa novamente o Excel Visivel para o Usuário
                oXL.UserControl = true;//Deixa o usuario ter controle do Excel 
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }          
        }

Alguém pode me Ajudar ?

Utilizo VS 2013 Profissonal

1 curtida

Consegui a solução para o meu problema, não consegui fazer com quê toda vez criasse um novo arquivo, porém, deixei um arquivo do Excel pré-configurado e mandei chama-lo, vi neste site como fazia para chamar um arquivo existente…
então, deixei o valor de X, na propria planilha e mandei calcular o valor de Y na própria aplicação.
detalhe: tentei mandar os dados daqui para serem calculados no próprio excel, porém no excel não reconhecia as formulas de primeira vez, e tinha de selecionar as celulas e pressionar a tecla ‘Enter’, oque não resolveria o meu problema.
Segue as linhas de código abaixo.


private void button3_Click(object sender, EventArgs e)
        {
            if (Atxt.Text == string.Empty && Btxt.Text == string.Empty && Ctxt.Text == string.Empty)
            {
                MessageBox.Show("Primeiramente informe os valores!");
            }
            else
            {
                a = Convert.ToDouble(Atxt.Text);
                b = Convert.ToDouble(Btxt.Text);
                c = Convert.ToDouble(Ctxt.Text);

                Excel.Application oXL; //Aplicação Excel
                Excel._Workbook oWB; //Pasta
                Excel._Worksheet oSheet; //Planilha
                Excel.Range oRng;

                try
                {
                    oXL = new Excel.Application();//Inicia o Excel  
                    oXL.Visible = true;//fica Visivel para o usuário

                    string CaminhoPlanilha =  @"Caminho arquivo excel";//Caminho onde o Arquivo do excel está

                    oWB = oXL.Workbooks.Add(CaminhoPlanilha);//Peço para abrir o arquivo no caminho especificado

                    //Ativa a planilha  especificada
                    oSheet = (Excel._Worksheet)oWB.ActiveSheet;

                    //Adiciona Cabeçalhos na célula
                    oSheet.Cells[1, 1] = "Valor de A";//Valor de A
                    oSheet.Cells[1, 2] = "Valor de B";//Valor de B
                    oSheet.Cells[1, 3] = "Valor de C";//Valor de C

                    //Formata as celulas A1:D1 como negrito, alinhamento centralizado
                    oSheet.get_Range("A1", "D1").Font.Bold = true;
                    oSheet.get_Range("A1", "D1").VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;

                    // Cria um Array de string para passar o Valor de A,B e C
                    int[,] ValorABC = new int[5, 3];

                    //as variáveis  'a', 'b' e 'c' recebem um valor numérico de um Textbox
                    ValorABC[0, 0] = Convert.ToInt32(a);//Valor de A
                    ValorABC[0, 1] = Convert.ToInt32(b);//Valor de B
                    ValorABC[0, 2] = Convert.ToInt32(c);//Valor de C

                    //Cria um Array para passar o Valor de Y que está entre -20 e 20
                    string[,] ValorY = new string[50, 50];

                    //Cria um Array para passar o Valor de X que o resultado será dado através do Y
                    int[,] ValorX = new int[50, 50];

                    //ValorX[Linha, Coluna]

                    ValorX[1, 0] = Convert.ToInt32(a * (-20) * (-20) + b * (-20) + c); ValorX[2, 0] = Convert.ToInt32(a * (-19) * (-19) + b * (-19) + c);
                    ValorX[3, 0] = Convert.ToInt32(a * (-18) * (-18) + b * (-18) + c); ValorX[4, 0] = Convert.ToInt32(a * (-17) * (-17) + b * (-17) + c);
                    ValorX[5, 0] = Convert.ToInt32(a * (-16) * (-16) + b * (-16) + c); ValorX[6, 0] = Convert.ToInt32(a * (-15) * (-15) + b * (-15) + c);
                    ValorX[7, 0] = Convert.ToInt32(a * (-14) * (-14) + b * (-14) + c); ValorX[8, 0] = Convert.ToInt32(a * (-13) * (-13) + b * (-13) + c);
                    ValorX[9, 0] = Convert.ToInt32(a * (-12) * (-12) + b * (-12) + c); ValorX[10, 0] = Convert.ToInt32(a * (-11) * (-11) + b * (-11) + c);
                    ValorX[11, 0] = Convert.ToInt32(a * (-10) * (-10) + b * (-10) + c); ValorX[12, 0] = Convert.ToInt32(a * (-9) * (-9) + b * (-9) + c);
                    ValorX[13, 0] = Convert.ToInt32(a * (-8) * (-8) + b * (-8) + c); ValorX[14, 0] = Convert.ToInt32(a * (-7) * (-7) + b * (-7) + c);
                    ValorX[15, 0] = Convert.ToInt32(a * (-6) * (-6) + b * (-6) + c); ValorX[16, 0] = Convert.ToInt32(a * (-5) * (-5) + b * (-5) + c);
                    ValorX[17, 0] = Convert.ToInt32(a * (-4) * (-4) + b * (-4) + c); ValorX[18, 0] = Convert.ToInt32(a * (-3) * (-3) + b * (-3) + c);
                    ValorX[19, 0] = Convert.ToInt32(a * (-2) * (-2) + b * (-2) + c); ValorX[20, 0] = Convert.ToInt32(a * (-1) * (-1) + b * (-1) + c);
                    ValorX[21, 0] = Convert.ToInt32(a * (0) * (0) + b * (0) + c); ValorX[22, 0] = Convert.ToInt32(a * (1) * (1) + b * (1) + c);
                    ValorX[23, 0] = Convert.ToInt32(a * (2) * (2) + b * (2) + c); ValorX[24, 0] = Convert.ToInt32(a * (3) * (3) + b * (3) + c);
                    ValorX[25, 0] = Convert.ToInt32(a * (4) * (4) + b * (4) + c); ValorX[26, 0] = Convert.ToInt32(a * (5) * (5) + b * (5) + c);
                    ValorX[27, 0] = Convert.ToInt32(a * (6) * (6) + b * (6) + c); ValorX[28, 0] = Convert.ToInt32(a * (7) * (7) + b * (7) + c);
                    ValorX[29, 0] = Convert.ToInt32(a * (8) * (8) + b * (8) + c); ValorX[30, 0] = Convert.ToInt32(a * (9) * (9) + b * (9) + c);
                    ValorX[31, 0] = Convert.ToInt32(a * (10) * (10) + b * (10) + c); ValorX[32, 0] = Convert.ToInt32(a * (11) * (11) + b * (11) + c);
                    ValorX[33, 0] = Convert.ToInt32(a * (12) * (12) + b * (12) + c); ValorX[34, 0] = Convert.ToInt32(a * (13) * (13) + b * (13) + c);
                    ValorX[35, 0] = Convert.ToInt32(a * (14) * (14) + b * (14) + c); ValorX[36, 0] = Convert.ToInt32(a * (15) * (15) + b * (15) + c);
                    ValorX[37, 0] = Convert.ToInt32(a * (16) * (16) + b * (16) + c); ValorX[38, 0] = Convert.ToInt32(a * (17) * (17) + b * (17) + c);
                    ValorX[39, 0] = Convert.ToInt32(a * (18) * (18) + b * (18) + c); ValorX[40, 0] = Convert.ToInt32(a * (19) * (19) + b * (19) + c);
                    ValorX[41, 0] = Convert.ToInt32(a * (20) * (20) + b * (20) + c);

                    //Para pegar o valor de A, B e de C
                    oSheet.get_Range("A2", "C2").Value2 = ValorABC;
                    //Valor de X, ficará entre  Y1:Y50
                    oSheet.get_Range("Y2", "Y43").Value2 = ValorX;


                    //Tamanho da Automatico entre as colunas A1:C1
                    oRng = oSheet.get_Range("A1", "C1");
                    oRng.EntireColumn.AutoFit();

                    oSheet.Protect("***");//senha para bloquear a planilha

                    oXL.Visible = true;//Deixa novamente o Excel Visivel para o Usuário
                    oXL.UserControl = false;//Deixa o usuario ter controle do Excel 

                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }

1 curtida