Seite 1 von 1

[Gelöst:] Säulendiagramm im Baseformular dem Datenumfang anpassen

Verfasst: So 17. Jan 2016, 09:57
von RobertG
Hallo *,

ein xy-Diagramm bekomme ich ja jetzt mit Base und einem Formular hin. Beim Säulendiagramm habe ich dann einfach auch im Writer das Prinzip erstellt und möchte das per Makro auf neue Datenbestände anpassen. Was mir bisher gelungen ist: Datenbestände für die bestehenden Säulen anzuzeigen, Legende und Beschriftung an zu passen. Nur bekomme ich es bisher nicht hin, die Anzahl der Säulen zu vergrößern, wenn eben mehr Daten vorhanden sind.

Ich hänge einmal so ein Beispiel an. Dort müssten in dem Formular "Kategorien" in dem Diagramm nach dem Betätigen des Buttons Je 4 Säulen angezeigt werden, ebenso in der Legende eben 4 verschiedene Monate angezeigt werden. Die Daten dazu werden durch das Makro weitergegeben, aber die Säulen erscheinen so leider nicht.

-----
Nachtrag: Ich habe den xray-Eintrag raus genommen - jetzt also ohne Fehlermeldung ...
-----

Gruß

Robert

Re: Säulendiagramm im Baseformular dem Datenumfang anpassen

Verfasst: So 17. Jan 2016, 11:34
von Freischreiber
Hallo Robert,

ich wollte nur mal ausprobieren... das X-Y-Diagramm geht gut, aber beim anderen bekomme ich eine Fehlermeldung:
xray.png
xray.png (8.63 KiB) 2179 mal betrachtet
Muß ich da vorher noch was installieren in Base?

Gruß
Freischreiber

Re: Säulendiagramm im Baseformular dem Datenumfang anpassen

Verfasst: So 17. Jan 2016, 12:21
von gogo
xray ist ein Diagnose-Tool für Star-Office-Basic - Ähnlich wie MRI. xray gibt's beim Entwickler (Bernard Marcelly) MRI über die Extensions-Page von OO oder LO (LO-Extensions)

für das Makro ist es aber unbedeutend - kommentier' die Zeile einfach aus

Re: Säulendiagramm im Baseformular dem Datenumfang anpassen

Verfasst: So 17. Jan 2016, 15:54
von gogo
:oops: ... is' nur 'ne Kleinigkeit:

Füge einfach die markierte Zeile ein:

Code: Alles auswählen

...
	oDiag = thisComponent.EmbeddedObjects.getByIndex(0)
	oDiag.model.Data.setData(NewData)  ' <<< EINFUEGEN!!!
	oDiag.model.DataProvider.setData(NewData)
	oDiag.model.DataProvider.setRowDescriptions(NewRowDescription)
	oDiag.model.DataProvider.setColumnDescriptions(NewColumnDescription)
	oDiag.Component.setmodified(true)
...
... aber frag' mich nicht warum ...

Zum Testen eignet sich dieses Makro "besser":

Code: Alles auswählen

sub DatenAendern

oDiag = thisComponent.EmbeddedObjects.getByIndex(0)

StartNeueDaten:

	' -   -   -   -   -   -   -   -   -   -   -   -   -   -   
	' Aussuchen der Kategorien und Saeulenanzahl  ...
	iKats    = cint(inputbox ("Kategorien:",,"3"))-1
	iSaeulen = cint(inputbox ("Saeulen:",,"4"))-1
	
	' -   -   -   -   -   -   -   -   -   -   -   -   -   -   
	' setzt die Daten ...
	'redim NewACD(iSaeulen), NewARD(iKats)
	redim  NewCD(iSaeulen),  NewRD(iKats)
	redim                     NewD(iKats)
	redim aRndData(iSaeulen)
	
	for i = 0 to iSaeulen
	'	NewACD(i) = Array(chr(i+97))
		 NewCD(i) =       chr(i+97)
	next i
	
	for i = 0 to iKats
		for ii = 0 to iSaeulen
			aRndData(ii)=cdbl(rnd) ' Saeulenhoehe wird ein Zufallswert
		next ii
	
	'	NewARD(i) =  Array(chr(i+65))
		 NewRD(i) =        chr(i+65)
		  NewD(i) =  aRndData()
		redim aRndData(iSaeulen)
	next i

	' -   -   -   -   -   -   -   -   -   -   -   -   -   -   
	'Veraendert das Diagramm ...
	'oDiag.model.DataProvider.setAnyColumnDescriptions(NewACD)
	'oDiag.model.DataProvider.setAnyRowDescriptions(NewARD)
	oDiag.model.DataProvider.setColumnDescriptions(NewCD)
	oDiag.model.DataProvider.setRowDescriptions(NewRD)
	
	oDiag.model.Data.setData(NewD)
	oDiag.model.DataProvider.setData(NewD)
	
	oDiag.Component.setmodified(true)
	
if msgbox(iKats + 1 & " Kategorien mit jeweils " & iSaeulen + 1 & " Saeulen!" & chr(10) & "nochmal?",4) = 6 then goto StartNeueDaten

end sub

Re: [Gelöst:] Säulendiagramm im Baseformular dem Datenumfang anpassen

Verfasst: So 17. Jan 2016, 16:40
von RobertG
Hallo gogo,

scheint, dass wir da vieles mit trial-and-error machen. Auf jeden Fall hier die Erfolgsmeldung: Tut's!

Gruß

Robert