🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Balkendiagramm per Makro erstellen

Alles zur Programmierung im LibreOffice.
Antworten
sepp_forcher
Beiträge: 2
Registriert: Do 12. Mai 2016, 20:19

Balkendiagramm per Makro erstellen

Beitrag von sepp_forcher » Sa 14. Mai 2016, 07:27

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!

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Balkendiagramm per Makro erstellen

Beitrag von F3K Total » Sa 14. Mai 2016, 08:14

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
Windows 11: AOO, LO Linux Mint: AOO, LO

sepp_forcher
Beiträge: 2
Registriert: Do 12. Mai 2016, 20:19

Re: Balkendiagramm per Makro erstellen

Beitrag von sepp_forcher » Sa 14. Mai 2016, 12:32

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.

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Balkendiagramm per Makro erstellen

Beitrag von F3K Total » Sa 14. Mai 2016, 13:07

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
Windows 11: AOO, LO Linux Mint: AOO, LO


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten