💚 BITTE helfen Sie uns NOCH HEUTE mit einer SPENDE 💚
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Balkendiagramm erstellen

Alles zur Programmierung im LibreOffice.
Ich Bins
Beiträge: 237
Registriert: Do 2. Aug 2018, 12:30

Balkendiagramm erstellen

Beitrag von Ich Bins » Sa 25. Mär 2023, 00:36

Hallo zusammen,

in der Datei
Beispiel.ods
(43.36 KiB) 67-mal heruntergeladen
befinden sich in Tabelle1 ein manuell erstelles Balkendiagramm wie es benötige, nur zwei Balken und darunter die Werte.
Die Anordnung der Werte in B3 und B4 sind von der Original-Tabelle so vorgegeben.
In Tabelle2 ist mein Versuch das Balkendiagramm per Makro zu erstellen.
Dazu verwendete ich als Vorlage die etwas abgewandelte Subroutine aus dem letzten Beitrag des Threads
Balkendiagramm per Makro erstellen.

Code: Alles auswählen

Sub Diagramm2

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	'1
start_row1 = 2
start_column2 = 3	'3
start_row2 = 2
REM ************ Diagram Creation ****************************
Doc = ThisComponent
Sheets = Doc.Sheets
Sheet = Sheets.getByName("Tabelle2")
Charts = Sheet.Charts
Rect.X = 8000
Rect.Y = 3000
Rect.Width = 8000
Rect.Height = 7000

RangeAddress(0).Sheet = 1
RangeAddress(0).StartColumn = start_column1
RangeAddress(0).StartRow = start_row1
RangeAddress(0).EndColumn = start_column1
RangeAddress(0).EndRow = start_row1 + 3

RangeAddress(1).Sheet = 1
RangeAddress(1).StartColumn = start_column2
RangeAddress(1).StartRow = start_row2
RangeAddress(1).EndColumn = start_column2
RangeAddress(1).EndRow = start_row2 + 3

Charts.addNewByName("MyChart1", Rect, RangeAddress(), True, True)
Chart = Charts.getByName("MyChart1").EmbeddedObject
Chart.Diagram = Chart.createInstance("com.sun.star.chart.BarDiagram")

Chart.Diagram.Wall.FillColor = RGB(255, 255, 255)
Chart.Diagram.HasYAxisDescription = 0
Chart.Diagram.HasYAxisGrid = 0
Chart.Diagram.YAxis.Min = 0 
Chart.Diagram.YAxis.Max = 30

End Sub
Die Balken per Makro im Diagramm in Tabelle2 anzuzeigen ist mir bisher nicht gelungen, wenn sich die beiden Werte in B3 und B4 befinden, ganz gleich wie ich start_column1, start_row1, start_column2, und start_row2 definiere.
Es funktioniert nur wenn sich die Werte in D4 und D5 befinden.
Wie ist es möglich das Diagramm per Makro zu erstellen, wenn sich die beiden Werte in B3 und B4 befinden und wie kann man die XY Skalen entfernen und die Datenbeschriftungen unter den Balken einfügen.

Viele Grüße
Ich Bins

Benutzeravatar
karolus
Beiträge: 2189
Registriert: Fr 10. Dez 2010, 10:01

Re: Balkendiagramm erstellen

Beitrag von karolus » Sa 25. Mär 2023, 12:39

Hallo

Es ist aber ein Säulendiagramm und kein Balkendiagramm!

und manchmal hilfts Dinge zu vereinfachen

Code: Alles auswählen

Sub Diagramm_einfach

Dim Rect As New com.sun.star.awt.Rectangle

Doc = ThisComponent
Sheets = Doc.Sheets
Sheet = Sheets.getByName("Tabelle1")
Charts = Sheet.Charts
Rect.X = 8000
Rect.Y = 3000
Rect.Width = 8000
Rect.Height = 7000
'in A4:A5 stehen die gewünschten Beschriftungen'
chart_address = sheet.getCellRangeByName("A4:B5").getRangeAddress()
'auch eine einzelne addresse muss ins »array-köfferchen«'
ar_chart_Address = array(chart_address)

Charts.addNewByName("MyChart1", Rect, ar_chart_Address, False, True)'das letzte True für die Zeilenbeschriftung
Chart = Charts.getByName("MyChart1").EmbeddedObject
Chart.Diagram = Chart.createInstance("com.sun.star.chart.BarDiagram")
Chart.Diagram.Vertical = False 'True ergibt »Balkendiagramm« WTF??'
Chart.Diagram.Wall.FillColor = -1
Chart.Diagram.HasYAxisDescription = 0

End Sub
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Ich Bins
Beiträge: 237
Registriert: Do 2. Aug 2018, 12:30

Re: Balkendiagramm erstellen

Beitrag von Ich Bins » Sa 25. Mär 2023, 19:05

Hallo Karolus,

das ist ja schon sehr gut aus, vielen Dank.
Die von Dir vorgesehenen Zellen für die Säulenbeschriftungen sind in der Original-Tabelle bereits belegt.
Manuell kann man die Datenbeschriftung nach vorheriger Auswahl der Säule im Kontextmenue/Datenbeschriftung_einfügen.
Danach wird sie erst oben angezeigt. Nach der Auswahl der eingefügten Datenbeschriftung kann man diese über das Kontextmenue/Datenbeschriftung_formatieren Reiter Datenbeschriftung unterhalb platzieren.
Ich konnte bisher noch keine Möglichkeit finden das mit Basic zu erreichen.
Wie man die XY-Scalen entfernt konnte ich auch noch nicht herausfinden. In den Eigenschaften des Diagramms kann man sie manuell entfernen.
Leider auch noch nicht wie man die Säulen unterschiedlich färbt. Manuell geht das im Kontextmenü/Datenpunkt formatieren.
Mit oObjektfarbe

Code: Alles auswählen

oObjektfarbe = Chart.Diagram.getDataRowProperties(0)
objektfarbe.FillColor = RGB(255,0,0)'(0,0,255)
oObjektfarbe.FillStyle = 1
Kann man nur beide Säulen einheitlich färben.

Viele Grüße
Ich Bins

Ich Bins
Beiträge: 237
Registriert: Do 2. Aug 2018, 12:30

Re: Balkendiagramm erstellen

Beitrag von Ich Bins » Di 28. Mär 2023, 13:15

Nach einem Doppelklick auf eine Säule des Diagrammes in Tabelle1 wird mit Mouseover über den Säulen
Datenpunkt 1, Datenreihe 1, Werte: 19,94
Datenpunkt 1, Datenreihe 2, Werte: 23,34
angezeigt.
Auch nach intensiver Suche konnte ich in den Dokumentationen und Foren noch keine Möglichkeit finden die Eigenschaften einer einzelne Datenreihe oder eines einzelnen Datenpunktes zu ändern.
Ist das überhaupt bei Säulendiagrammen mit StarBasic möglich?

Viele Grüße
Ich Bins

mikele
Beiträge: 1659
Registriert: Mo 1. Aug 2011, 20:51

Re: Balkendiagramm erstellen

Beitrag von mikele » Di 28. Mär 2023, 14:02

Hallo,

Code: Alles auswählen

Chart.Diagram.getDataPointProperties(0,0).FillColor=rgb(0,255,0)
Gruß,
mikele

Ich Bins
Beiträge: 237
Registriert: Do 2. Aug 2018, 12:30

Re: Balkendiagramm erstellen

Beitrag von Ich Bins » Di 28. Mär 2023, 16:03

Hallo mikele,

vielen Dank, jetzt entspricht das mit Basic erstellte Diagramm fast dem manuell erstellten.
Nur der Abstand zw. Säulen ist noch zu groß.

Code: Alles auswählen

Sub Diagramm_einfach

Dim Rect As New com.sun.star.awt.Rectangle

Doc = ThisComponent
Sheets = Doc.Sheets
Sheet = Sheets.getByName("Tabelle1")
Charts = Sheet.Charts
Rect.X = 5000
Rect.Y = 2500
Rect.Width = 4000
Rect.Height = 3000

chart_address = sheet.getCellRangeByName("A3:B4").getRangeAddress()
ar_chart_Address = array(chart_address)

Charts.addNewByName("MyChart2", Rect, ar_chart_Address, False, True)
Chart = Charts.getByName("MyChart2").EmbeddedObject
Chart.Diagram = Chart.createInstance("com.sun.star.chart.BarDiagram")
Chart.Diagram.Wall.FillColor = -1
Chart.Diagram.HasYAxisDescription = 0
Chart.Diagram.HasYAxisGrid = 0
Chart.Diagram.HasYAxis = 0
Chart.Diagram.HasXAxis = 0
'Chart.Diagram.XAxis.Min = 0 
'Chart.Diagram.XAxis.Max = 70

Chart.Diagram.getDataPointProperties(0,0).FillColor=rgb(128,128,128)
Chart.Diagram.getDataPointProperties(1,0).FillColor=rgb(0,0,0)
Chart.Diagram.getDataPointProperties(0,0).DataCaption = 1
Chart.Diagram.getDataPointProperties(0,0).LabelPlacement = 6
Chart.Diagram.getDataPointProperties(1,0).DataCaption = 1
Chart.Diagram.getDataPointProperties(1,0).LabelPlacement = 6
End Sub

Ich Bins
Beiträge: 237
Registriert: Do 2. Aug 2018, 12:30

Re: Balkendiagramm erstellen

Beitrag von Ich Bins » Di 28. Mär 2023, 23:07

Mit

Code: Alles auswählen

Chart.Diagram.YAxis.GapWidth = 20
konnte ich nun auch den Abstand zw. den Säulen einstellen.

Ich Bins
Beiträge: 237
Registriert: Do 2. Aug 2018, 12:30

Re: Balkendiagramm erstellen

Beitrag von Ich Bins » Mi 29. Mär 2023, 10:33

Die Beschriftung (Wert) der linken Säulen kann man mit

Code: Alles auswählen

oChart.Diagram.getDataPointProperties(0,0).DataCaption = 1
sichtbar machen, aber wie ändert man jetzt noch die Schriftart und die Schriftgröße?

Benutzeravatar
karolus
Beiträge: 2189
Registriert: Fr 10. Dez 2010, 10:01

Re: Balkendiagramm erstellen

Beitrag von karolus » Mi 29. Mär 2023, 12:08

Hat dich heute schon jemand auf die Verwendung von mri hingewiesen??

Code: Alles auswählen

bars = Chart.Diagram.getDataPointProperties
bar1, bar2 = bars(0,0), bars(1,0)

bar1.FillColor = int("808080",16)
bar2.FillColor = int("ffff00",16)
bar2.DataCaption = bar1.DataCaption = 1
bar2.LabelPlacement = bar1.LabelPlacement = 6
bar2.CharHeight = bar1.CharHeight = 42
bar2.CharFontName = bar1.CharFontName = "Cantarell Extra Bold"
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Ich Bins
Beiträge: 237
Registriert: Do 2. Aug 2018, 12:30

Re: Balkendiagramm erstellen

Beitrag von Ich Bins » Mi 29. Mär 2023, 14:57

Vielen Dank Karolus,

seltsamerweise hatte ich gestern mit CharHeight keinen Erfolg.

Code: Alles auswählen

oChart.Diagram.getDataPointProperties(0,0).CharHeight = 8
Heute funzts.

Wenn ich Deinen kompletten Lösungsvorschlag teste erhalte ich in der Zeile

Code: Alles auswählen

bar1, bar2 = bars(0,0), bars(1,0)
die Fehlermeldung:
BASIC-Syntaxfehler.
Unerwartetes Symbol: ,.

Zu MRI.
Bei meinen letzten Recherchen ist mir die Empfehlung MRI schon mehrfach begegnet.
Am Wochenende installierte ich MRI wie in dieser Anleitung beschrieben.

Weil ich danach im Macro (ganz egal bei welcher Variable) in der zweiten Zeile

Code: Alles auswählen

call InitializeMRI()
oMRI.inspect( Chart )
ein leeres MRI-Fenster erhalte und die MRI-Meldung "Void"
habe ich mich mit MRI nicht weiter befasst.

Wie muss denn

Code: Alles auswählen

Global oMRI As Object

Sub InitializeMRI()
  Globalscope.BasicLibraries.LoadLibrary("MRILib")
  oMRI = CreateUnoService("mytools.Mri")
End Sub
bei LO aussehen?

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten