none
¿Cómo dar valores a eje X en gráfica Excel desde Vb.net? RRS feed

  • Pregunta

  • Hola de nuevo, tengo un gráfico Excel creado dinámicamente desde Vb.net y en el eje X no consigo poner las fechas correspondiente a los valores, cuando lo intento me sale una nueva serie o en su defecto me pone las fechas desde el año 1900. Pongo el código para ver si me echais una mano. Gracias.

    'CREAMOS EL GRÁFICO
    
                Dim chartPage As Chart
                Dim exCharts As ChartObjects
                Dim myChart As ChartObject
                Dim chartRange As Range
    
                exCharts = .ActiveSheet.ChartObjects
                myChart = exCharts.Add(401, 2, 418, 300)
                chartPage = myChart.Chart
    
                chartRange = .ActiveSheet.Range("B1", "E32")
    
                chartPage.SetSourceData(Source:=chartRange)
                chartPage.ChartType = Excel.XlChartType.xlXYScatterLinesNoMarkers
                chartPage.HasTitle = True
                chartPage.ChartTitle.Characters.Text = "TENSIÓN MENSUAL"
    
                chartPage.HasLegend = True
                chartPage.Legend.Position = XlLegendPosition.xlLegendPositionBottom
    

    miércoles, 21 de octubre de 2020 11:39

Todas las respuestas

  • Hola solilopi, 

      

    Te dejo estos dos ejemplos para que los puedas ver y adaptarlos dependiendo de como tengas el codigo -Format-Chart-Axis y crear x axis y y axis.

    Gracias por usar los foros de MSDN.   

     

     Andres Aguilar

     ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN sientase en la libertad de contactar  MSDNFSF@microsoft.com. 

    miércoles, 21 de octubre de 2020 14:44
    Moderador
  • Hola, gracias por tu respuesta pero yo ya tengo un chart en mi  aplicación. Lo que necesito es dar valores al chart que creo en Excel de forma dinámica a partir de los datos que yo selecciono, mira la captura de pantalla para ver que es lo que me pasa.

    Como puedes ver en el eje X me muestra fechas a partir de enero de 1900, si yo incluyo en el rango la columna donde están las fechas, me las incluye como dato en la gráfica y me sigue mostrando las fechas desde 1900. Lo que quiero es poder incluir en el eje X esa columna de fechas, no en la gráfica como valor.

    Espero haberme hecho entender. Gracias por tu ayuda / tiempo.

    miércoles, 21 de octubre de 2020 16:02
  • Deleted
    miércoles, 21 de octubre de 2020 16:21
  • Hola, gracias por tu respuesta, no entiendo lo que dices, la columna de Excel donde almaceno las fechas no tiene formato, por lo que, a mi modesto entender, no debería dar ningun problema a la hora de graficar con ella. El problema, como dije antes, es a la hora de pasar esa columna al eje X desde Vb.net, que no sé como hacerlo, ya que si la incluyo en el rango me la muestrea como un valor más y en todo caso, la incluya o no, el eje X siempre me muestra el intervalo a partir del 1/01/1900.
    miércoles, 21 de octubre de 2020 16:46
  • Deleted
    miércoles, 21 de octubre de 2020 17:39
  • Hola, gracias por tu respuesta, creo que no lo has entendido, lo que necesito es que me muestre las fechas que aparecen en la columna "A" en el eje X, si hago lo que tú me comentas, me las combierte a números y no es eso lo que busco.

    Gracias por tu tiempo/ayuda.

    miércoles, 21 de octubre de 2020 18:02
  • Hola, todavía sigo esperando que un alma caritativa me ilumine con el problema que tengo. Gracias.
    viernes, 23 de octubre de 2020 12:30
  • Deleted
    viernes, 23 de octubre de 2020 20:57
  • Hola, gracias por tu respuesta, no lo tengo muy claro, nunca había trabajado con Excel desde Vb.net, lo que he intentado hacer según tu comentario es:

    Dim coleccion As SeriesCollection = chartPage.SeriesCollection
                Dim serie1, serie2, serie3, serie4 As Excel.Series
    
                serie1 = coleccion.NewSeries()
                serie1.XValues = .ActiveSheet.Range("B1:B32")
                serie2 = coleccion.NewSeries()
                serie2.XValues = .ActiveSheet.Range("C1:C32")
                serie3 = coleccion.NewSeries()
                serie3.XValues = .ActiveSheet.Range("D1:D32")
                serie4 = coleccion.NewSeries()
                serie4.XValues = .ActiveSheet.Range("E1:E32")
    No me funciona, está mal. Echame un cable, te lo agradecería mil.

    sábado, 24 de octubre de 2020 6:32
  • Deleted
    sábado, 24 de octubre de 2020 12:38
  • Hola, buenos días, lo he "arreglado" pero no me muestra ni los nombres de las series, ni las fechas en el eje X.

    El código que tengo ahora es:

    'CREAMOS EL GRÁFICO
    
                Dim chartPage As Chart
                Dim exCharts As ChartObjects = .ActiveSheet.ChartObjects
                Dim myChart As ChartObject = exCharts.Add(462, 2, 418, 300)
    
                chartPage = myChart.Chart
                Dim coleccion As SeriesCollection = chartPage.SeriesCollection
                Dim serie1, serie2, serie3, serie4 As Excel.Series
    
                serie1 = coleccion.NewSeries()
                serie1.XValues = .ActiveSheet.Range("A1:A32")
                serie1.Values = .ActiveSheet.Range("B1:B32")
                serie2 = coleccion.NewSeries()
                serie2.XValues = .ActiveSheet.Range("A1:A32")
                serie2.Values = .ActiveSheet.Range("C1:C32")
                serie3 = coleccion.NewSeries()
                serie3.XValues = .ActiveSheet.Range("A1:A32")
                serie3.Values = .ActiveSheet.Range("D1:D32")
                serie4 = coleccion.NewSeries()
                serie4.XValues = .ActiveSheet.Range("A1:A32")
                serie4.Values = .ActiveSheet.Range("E1:E32")
    
                exCharts = .ActiveSheet.ChartObjects
                
                chartPage = myChart.Chart
                
                chartPage.ChartType = Excel.XlChartType.xlXYScatterLinesNoMarkers
                chartPage.HasTitle = True
                chartPage.ChartTitle.Characters.Text = "TENSIÓN MENSUAL"
    
                chartPage.HasLegend = True
                chartPage.Legend.Position = XlLegendPosition.xlLegendPositionBottom

    ¿Puedes echarme una mano? Gracias.


    • Editado solilopi domingo, 25 de octubre de 2020 11:35 Error
    domingo, 25 de octubre de 2020 11:34
  • Hola, buenos días, lo he "arreglado" pero no me muestra ni los nombres de las series, ni las fechas en el eje X.

    El código que tengo ahora es:

    'CREAMOS EL GRÁFICO
    
                Dim chartPage As Chart
                Dim exCharts As ChartObjects = .ActiveSheet.ChartObjects
                Dim myChart As ChartObject = exCharts.Add(462, 2, 418, 300)
    
                chartPage = myChart.Chart
                Dim coleccion As SeriesCollection = chartPage.SeriesCollection
                Dim serie1, serie2, serie3, serie4 As Excel.Series
    
                serie1 = coleccion.NewSeries()
                serie1.XValues = .ActiveSheet.Range("A1:A32")
                serie1.Values = .ActiveSheet.Range("B1:B32")
                serie2 = coleccion.NewSeries()
                serie2.XValues = .ActiveSheet.Range("A1:A32")
                serie2.Values = .ActiveSheet.Range("C1:C32")
                serie3 = coleccion.NewSeries()
                serie3.XValues = .ActiveSheet.Range("A1:A32")
                serie3.Values = .ActiveSheet.Range("D1:D32")
                serie4 = coleccion.NewSeries()
                serie4.XValues = .ActiveSheet.Range("A1:A32")
                serie4.Values = .ActiveSheet.Range("E1:E32")
    
                exCharts = .ActiveSheet.ChartObjects
                
                chartPage = myChart.Chart
                
                chartPage.ChartType = Excel.XlChartType.xlXYScatterLinesNoMarkers
                chartPage.HasTitle = True
                chartPage.ChartTitle.Characters.Text = "TENSIÓN MENSUAL"
    
                chartPage.HasLegend = True
                chartPage.Legend.Position = XlLegendPosition.xlLegendPositionBottom

    ¿Puedes echarme una mano? Gracias.


    Hola, solucionado el tema etiquetas eje X, ¿Cómo puedo poner esas etique tas en vertical?

    Mi códogo actual es :

     'CREAMOS EL GRÁFICO
    
                Dim chartPage As Chart
                Dim exCharts As ChartObjects = .ActiveSheet.ChartObjects
                Dim myChart As ChartObject = exCharts.Add(462, 2, 418, 400)
    
                chartPage = myChart.Chart
    
                'DAMOS VALORES A LOS EJES DE LA GRÁFICA
    
                Dim coleccion As SeriesCollection = chartPage.SeriesCollection
                Dim serie1, serie2, serie3, serie4 As Excel.Series
    
                serie1 = coleccion.NewSeries()
                serie1.Name = .ActiveSheet.Range("B1").Value
                serie1.XValues = .ActiveSheet.Range("A2:A32")
                serie1.Values = .ActiveSheet.Range("B2:B32")
    
                serie2 = coleccion.NewSeries()
                serie2.Name = .ActiveSheet.Range("C1").Value
                serie2.XValues = .ActiveSheet.Range("A2:A32")
                serie2.Values = .ActiveSheet.Range("C2:C32")
    
                serie3 = coleccion.NewSeries()
                serie3.Name = .ActiveSheet.Range("D1").Value
                serie3.XValues = .ActiveSheet.Range("A2:A32")
                serie3.Values = .ActiveSheet.Range("D2:D32")
    
                serie4 = coleccion.NewSeries()
                serie4.Name = .ActiveSheet.Range("E1").Value
                serie4.XValues = .ActiveSheet.Range("A2:A32")
                serie4.Values = .ActiveSheet.Range("E2:E32")
    
                chartPage.ChartType = Excel.XlChartType.xlXYScatterLinesNoMarkers
                chartPage.HasTitle = True
                chartPage.ChartTitle.Characters.Text = "TENSIÓN MENSUAL"
    
                chartPage.HasLegend = True
                chartPage.Legend.Position = XlLegendPosition.xlLegendPositionBottom
    Gracias

    jueves, 29 de octubre de 2020 10:13