Balkendiagramm in Powerpoint erstellen und formatieren

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Comtimizer.

    Balkendiagramm in Powerpoint erstellen und formatieren

    Liebe Community,

    ich möchte gerne eine Powerpoint-Präsentation aus visual basic heraus erstellen und in diese ein Balkendiagramm einfügen. Dieses Balkendiagramm möchte ich wie folgt formatieren:
    - X-Achsenbeschriftung für jeden Wert eines Balkens anzeigen lassen. Aktuell wird nur die erste und die letzte Beschriftung dargestellt.
    - alle Beschriftungen senkrecht oder schräg stellen. Aktuell werden die Beschriftungen waagerecht angezeigt.

    Bevor ich mit Powerpoint angefangen habe, habe ich mit den in VB enthaltenen Grafiken geübt und folgende Befehle für diese Formatierungen gefunden; die auch funktionieren.

    Quellcode

    1. Balkendiagramm.ChartAreas(0).AxisX.LabelStyle.Angle = -45 'hier werden die Labels aller Balken schräg gestellt
    2. Balkendiagramm.ChartAreas(0).AxisX.MinorTickMark.Enabled = True
    3. Balkendiagramm.ChartAreas(0).AxisX.Interval = 1


    Leider komme ich irgend wie nicht drauf, wie ich diese Befehle für ein Balkendiagramm in Powerpoint anwenden kann. Wie Ihr sehen werdet, habe ich mit ChartArea und PlotArea schon meine ersten Gehversuche unternommen und versucht, den richtigen Befehl zu finden, aber bislang leider erfolglos.
    Wäre super klasse, könnte jemand über folgendes Programm schauen und mir den entscheidenden Hinweis geben.

    Vielen Dank im Voraus und viele Grüße.

    Quellcode

    1. Dim Folie As PowerPoint.Slide = Nothing
    2. Dim Datei As String = "d:\works\vb\Bsp_Präsentation_leer.pptx"
    3. Dim AppPowerPoint As New PowerPoint.Application
    4. Dim OpenPresentation As PowerPoint.Presentation
    5. AppPowerPoint = CreateObject("PowerPoint.Application")
    6. AppPowerPoint.WindowState = PowerPoint.PpWindowState.ppWindowMinimized
    7. AppPowerPoint.Activate()
    8. OpenPresentation = AppPowerPoint.Presentations.Add
    9. AppPowerPoint.WindowState = PowerPoint.PpWindowState.ppWindowMinimized
    10. Folie = OpenPresentation.Slides.Add(1, PowerPoint.PpSlideLayout.ppLayoutTitleOnly)
    11. Dim chrt As Graph.Chart
    12. chrt = Folie.Shapes.AddOLEObject(15, 150, 800, 300, "MSGraph.Chart.8").OLEFormat.Object
    13. 'chrt.Width = 800
    14. 'der komplette Diagrammfensterbereich
    15. Dim cArea As Graph.ChartArea = chrt.ChartArea
    16. cArea.Interior.Color = Color.Orange
    17. 'der eigentliche Datenbereich
    18. Dim Zeichenbereich As Graph.PlotArea = chrt.PlotArea
    19. Zeichenbereich.Width = 300
    20. Zeichenbereich.Left = 50
    21. Dim Legende As Graph.Legend = chrt.Legend
    22. Legende.Left = 500
    23. Legende.Width = 300
    24. Legende.AutoScaleFont = True
    25. Legende.Height = 700
    26. Legende.Top = 10
    27. With (chrt)
    28. .ChartType = Graph.XlChartType.xl3DColumnClustered
    29. For i = 0 To 1
    30. With .Application.DataSheet
    31. .Range("A0").Value = "Universitäten"
    32. .Range("B0").Value = "Industrie und viele weitere Branchen"
    33. .Range("C0").Value = "bla bla bla bla bla bla"
    34. .Range("D0").Value = "hallo_hallo_hallo_hallo" 'mit leeren String wird die Überschrift gelöscht, aber nicht die komplette Spalte
    35. .Range("E0").Value = "abc abc abc"
    36. .Range("F0").Value = "abcdefghijklmopqrstuvwxyz"
    37. .Range("G0").Value = "1234567890"
    38. .Range("01").Value = "Zeile1" 'Legende
    39. .Range("02").Clear()
    40. .Range("03").Clear()
    41. .Cells(2, 2).Value = "200"
    42. .Cells(2, 3).Value = "50"
    43. .Cells(2, 4).Value = "100"
    44. .Cells(2, 5).Value = "100"
    45. .Cells(2, 6).Value = "300"
    46. .Cells(2, 7).Value = "100"
    47. .Cells(2, 8).Value = "100"
    48. .Cells(3, 2).Value = ""
    49. .Cells(3, 3).Value = ""
    50. .Cells(3, 4).Value = ""
    51. .Cells(3, 5).Value = ""
    52. .Cells(3, 6).Value = ""
    53. .Cells(3, 7).Value = ""
    54. .Cells(3, 8).Value = ""
    55. .Cells(4, 2).Value = ""
    56. .Cells(4, 3).Value = ""
    57. .Cells(4, 4).Value = ""
    58. .Cells(4, 5).Value = ""
    59. .Cells(4, 6).Value = ""
    60. .Cells(4, 7).Value = ""
    61. .Cells(4, 8).Value = ""
    62. End With
    63. Next
    64. End With
    65. OpenPresentation.SaveAs(Datei)
    66. OpenPresentation.Close()
    67. AppPowerPoint.Quit()
    68. AppPowerPoint = Nothing
    69. OpenPresentation = Nothing
    Willkommen im Forum. :thumbup:

    Comtimizer schrieb:

    ich möchte gerne eine Powerpoint-Präsentation aus visual basic heraus erstellen und in diese ein Balkendiagramm einfügen.
    Willst Du für jede Deiner zukünftigen Präsentationen ein neues VB-Programm erstellen?
    Welchen Sinn soll diese Fingerübung haben?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo,

    für meine Präsentationen, die ich geben muss, fallen Daten in immer der gleichen Art an. Natürlich ändern sich Spaltenanzahl, Werte und Beschriftungen. Diese dynamischen Anpassungen habe ich auch schon anderweitig abgefangen und umgesetzt, so dass auf Knopfdruck die Präsentationen automatisch erzeugt werden. Hier habe ich der Einfachheit halber nur 7 Beispielzahlen und -beschriftungen fest programmiert angegeben.
    Bei meinem Beitrag geht es um meine Fragen bzgl. der Formatierung des Diagramms in Powerpoint.
    Ich wäre sehr dankbar, könnte mir hierzu jemand den richtigen Tipp geben.
    Vielen Dank im Voraus.
    @Comtimizer Dann solltest Du überlegen, das ganze in VB abzuwickeln, ohne PowerPoint.
    Bei dieser Wiederholbarkeit bietet sich das geradezu an.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich wickele meine komplette Datenhaltung und Auswertung über VB ab. Um Beteiligten einen Bericht zu geben, MUSS ich Powerpoint verwenden.
    Diese Entscheidung möchte ich hier nicht weiter diskutieren; ist auch nicht zielführend.
    Aber vielleicht besteht die Möglichkeit, meine beiden o.g. Fragen zur Formatierung des Balkendiagramms wieder in den Fokus dieses Gesprächs zu rücken.
    Fällt Dir hierzu etwas hilfreiches ein?
    Hallo @Comtimizer

    Anhand dieses Beispieles -> Create PowerPoint 2010 Chart with New Chart Object Model
    - Axis-Objekt (PowerPoint) -> XlAxisType-Aufzählung (PowerPoint)
    - TickLabels.Orientation property (PowerPoint)
    - Axis.HasMinorGridlines-Eigenschaft (PowerPoint)
    - Axis.MinorUnit-Eigenschaft (PowerPoint)

    Spoiler anzeigen

    Visual Basic-Quellcode

    1. Sub CreateChart()
    2. Dim myChart As Chart
    3. Dim gChartData As ChartData
    4. Dim gWorkBook As Excel.Workbook
    5. Dim gWorkSheet As Excel.Worksheet
    6. ' Create the chart and set a reference to the chart data.
    7. Set myChart = ActivePresentation.Slides(1).Shapes.AddChart.Chart
    8. Set gChartData = myChart.ChartData
    9. ' Set the Workbook and Worksheet references.
    10. Set gWorkBook = gChartData.Workbook
    11. Set gWorkSheet = gWorkBook.Worksheets(1)
    12. ' Add the data to the workbook.
    13. ' gWorkSheet.ListObjects("Tabelle1").Resize gWorkSheet.Range("A1:B5")
    14. ' gWorkSheet.Range("a1").Value = "Items"
    15. ' gWorkSheet.Range("a2").Value = "Coffee"
    16. ' gWorkSheet.Range("a3").Value = "Soda"
    17. ' gWorkSheet.Range("a4").Value = "Tea"
    18. ' gWorkSheet.Range("a5").Value = "Water"
    19. ' 'gWorkSheet.Range("b1").Value = "Amount"
    20. ' gWorkSheet.Range("b2").Value = "1000"
    21. ' gWorkSheet.Range("b3").Value = "2500"
    22. ' gWorkSheet.Range("b4").Value = "4000"
    23. ' gWorkSheet.Range("b5").Value = "3000"
    24. ' Apply styles to the chart.
    25. With myChart
    26. .ChartType = XlChartType.xlColumnClustered
    27. '.ChartStyle = 4
    28. '.ApplyLayout 2, Office.XlChartType.xlLine
    29. .ClearToMatchStyle
    30. End With
    31. ' Add the axis title.
    32. With myChart.Axes(xlValue)
    33. .HasTitle = True
    34. .AxisTitle.Text = "Units"
    35. .HasMajorGridlines = True
    36. .HasMinorGridlines = True
    37. .MajorUnit = 1 '.Interval = 1
    38. .MinorUnit = 0.2 '.Interval = 1
    39. End With
    40. 'myChart.ApplyDataLabels
    41. With myChart.Axes(xlCategory)
    42. .TickLabels.Alignment = xlHAlignCenter
    43. .TickLabels.Orientation = -45 'LabelStyle.Angle = -45 'hier werden die Labels aller Balken schräg gestellt
    44. .HasMajorGridlines = True
    45. .HasMinorGridlines = True '.MinorTickMark.Enabled = True
    46. '.MajorUnit = 2 '.Interval = 1
    47. '.MinorUnit = 1 '.Interval = 1
    48. End With
    49. ' Clean up the references.
    50. Set gWorkSheet = Nothing
    51. ' gWorkBook.Application.Quit
    52. Set gWorkBook = Nothing
    53. Set gChartData = Nothing
    54. Set myChart = Nothing
    55. End Sub