Seite 1 von 1
Balkendiagramm per Makro erstellen
Verfasst: Sa 14. Mai 2016, 07:27
von sepp_forcher
Hallo zusammen,
ich möchte automatisiert aus einer großen Tabelle Balkendiagramme erstellen. Wie kann man per Makro die Datenreihen im Diagramm nicht als Range definieren sondern getrennte, nicht nebeneinander liegende Bereiche angeben??
In meinem Fall würden also beispielsweise die Kategorien für die Balken in Spalte "B" stehen, die Daten aber in "D". In Spalte "C" stehen andere Daten die nicht mitberücksichtigt werden sollen...
Als Beispiel mein Code, der nicht wie gefordert funktioniert...:
Code: Alles auswählen
REM ************ Diagram Creation ****************************
Doc = ThisComponent
Charts = Doc.Sheets(1).Charts
Rect.X = 8000
Rect.Y = 1000
Rect.Width = 10000
Rect.Height = 7000
RangeAddress(0).Sheet = 0
RangeAddress(0).StartColumn = start_column
RangeAddress(0).StartRow = start_row
RangeAddress(0).EndColumn = start_column +2
RangeAddress(0).EndRow = start_row + 16
Charts.addNewByName("MyChart", Rect, RangeAddress(), True, True)
Chart = Charts.getByName("MyChart").EmbeddedObject
Chart.Diagram = Chart.createInstance("com.sun.star.chart.BarDiagram")
Chart.Diagram.Vertical = True
Chart.HasMainTitle = True
Chart.Title.String = "Main Title String"
Chart.HasSubTitle = True
Chart.Subtitle.String = "Subtitle String"
Wäre super wenn jemand eine Idee hätte.... Danke schon mal im Voraus!
Re: Balkendiagramm per Makro erstellen
Verfasst: Sa 14. Mai 2016, 08:14
von F3K Total
Moin,
dein Code ist unvollständig und kann nicht funktionieren.
Stelle bitte zunächst einen Code zur Verfügung, der ein "normales Balkendiagramm" erzeugt, dann können wir dir bestimmt helfen, die Spalte B "auszulassen".
Gruß R
Re: Balkendiagramm per Makro erstellen
Verfasst: Sa 14. Mai 2016, 12:32
von sepp_forcher
Das hier ist der gesamte Code und er ist soweit lauffähig...
Code: Alles auswählen
REM ***** BASIC *****
Sub Main
Dim Doc As Object
Dim Charts As Object
Dim Chart as Object
Dim Rect As New com.sun.star.awt.Rectangle
Dim RangeAddress(0) As New com.sun.star.table.CellRangeAddress
Dim start_column as integer
Dim start_row as integer
REM ************ Setup ***************************************
start_column = 1
start_row = 2
REM ************ Diagram Creation ****************************
Doc = ThisComponent
Sheets = Doc.Sheets
Sheet = Sheets.getByName("Diagramme")
Charts = Sheet.Charts
Rect.X = 8000
Rect.Y = 1000
Rect.Width = 10000
Rect.Height = 7000
RangeAddress(0).Sheet = 3
RangeAddress(0).StartColumn = start_column
RangeAddress(0).StartRow = start_row
RangeAddress(0).EndColumn = start_column + 2
RangeAddress(0).EndRow = start_row + 16
Charts.addNewByName("MyChart1", Rect, RangeAddress(), True, True)
Chart = Charts.getByName("MyChart1").EmbeddedObject
Chart.Diagram = Chart.createInstance("com.sun.star.chart.BarDiagram")
Chart.Diagram.Vertical = True
Chart.HasMainTitle = True
Chart.Title.String = "Main Title String"
Chart.HasSubTitle = True
Chart.Subtitle.String = "Subtitle String"
REM ************ End Diagram Creation **************************
End Sub
Allerdings möchte ich eben statt der RangeAdress keinen Range sondern zweit Spalten angeben --> für Kategorie und Daten des Balkendiagrammes.
Als alternative lösung fällt mir im Moment nur ein die Daten per Makro in einem eigenen (versteckten) Sheet entsprechend so umzusortieren dass sie immer im Format Kategorie:Daten1, Kategorie:Daten2 usw... vorliegen und dann per Schleife den Range immer um zwei Spalten weiterschieben... Aber eine "saubere Lösung" ist das eigentlich nicht... Vielleicht geht es ja besser! Es ärgert mich vor allem deshalb weil man, wenn man das Diagramm "manuell" erzeugt sehr wohl unterschiedliche Spalten als Kategorie und Daten selektieren kann. Bzw. Datenreihen einzeln einfügen.
Re: Balkendiagramm per Makro erstellen
Verfasst: Sa 14. Mai 2016, 13:07
von F3K Total
Hi,
versuch mal dies, habe ich mit XRAY herausgefunden.
Code: Alles auswählen
Sub Main
Dim Doc As Object
Dim Charts As Object
Dim Chart as Object
Dim Rect As New com.sun.star.awt.Rectangle
Dim RangeAddress(1) As New com.sun.star.table.CellRangeAddress
Dim start_column1 as integer
Dim start_row1 as integer
Dim start_column2 as integer
Dim start_row2 as integer
REM ************ Setup ***************************************
start_column1 = 1
start_row1 = 2
start_column2 = 3
start_row2 = 2
REM ************ Diagram Creation ****************************
Doc = ThisComponent
Sheets = Doc.Sheets
Sheet = Sheets.getByName("Diagramme")
Charts = Sheet.Charts
Rect.X = 8000
Rect.Y = 1000
Rect.Width = 10000
Rect.Height = 7000
RangeAddress(0).Sheet = 3
RangeAddress(0).StartColumn = start_column1
RangeAddress(0).StartRow = start_row1
RangeAddress(0).EndColumn = start_column1
RangeAddress(0).EndRow = start_row1 + 16
RangeAddress(1).Sheet = 3
RangeAddress(1).StartColumn = start_column2
RangeAddress(1).StartRow = start_row2
RangeAddress(1).EndColumn = start_column2
RangeAddress(1).EndRow = start_row2+ 16
Charts.addNewByName("MyChart1", Rect, RangeAddress(), True, True)
Chart = Charts.getByName("MyChart1").EmbeddedObject
Chart.Diagram = Chart.createInstance("com.sun.star.chart.BarDiagram")
Chart.Diagram.Vertical = True
Chart.HasMainTitle = True
Chart.Title.String = "Main Title String"
Chart.HasSubTitle = True
Chart.Subtitle.String = "Subtitle String"
REM ************ End Diagram Creation **************************
End Sub
Es lassen sich soviele Datenbereiche wie gewünscht einbauen.
Gruß R