Helfen Sie uns bitte noch HEUTE!

❤️ DANKE >><< DANKE ❤️

Vielen Dank für Ihre SPENDE.

> 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. 🤗

[gelöst ✔] Zugriff auf und Manipulation von Diagrammen (charts) (in Calc)

Alles zur Programmierung im LibreOffice.
nitja
Beiträge: 176
Registriert: Di 20. Okt 2020, 15:55

Re: Zugriff auf und Manipulation von Diagrammen (charts) (in Calc)

Beitrag von nitja » Mi 10. Apr 2024, 21:35

oh Mann! :oops: Das ist jetzt echt peinlich: habe gerade gesehen, dass ich an genau der Stelle in einem ähnlichen Design vor 3½ Jahren hier schon einmal Hilfe zu den selben Themen gesucht und gefunden hatte.
Allerdings hatte ich vor 20 Monaten buchstäblich schlagartig fast alles vergessen, was ich je zu LO in 6 (und Skripten allgemein in >30) Jahren gelernt hatte. Und erst seit Januar konnte ich mich wieder, anfangs extrem zäh, in die Nähe des früheren Standes zurück kämpfen.
Zuletzt geändert von nitja am So 14. Apr 2024, 17:51, insgesamt 1-mal geändert.
LO 24.2.0.3 (X86_64) auf Linux 6.6.26-1-MANJARO, gnome 45.4, (gtk 4) gtk3 für LO

nitja
Beiträge: 176
Registriert: Di 20. Okt 2020, 15:55

Re: Zugriff auf und Manipulation von Diagrammen (charts) (in Calc)

Beitrag von nitja » Fr 12. Apr 2024, 20:07

Hilft nix, ich stecke doch seit über einer Woche fest bei dem Versuch, den Bezug zu den im neuen Diagramm zu verwendenden Daten anzupassen.

Ganz zu schweigen davon, wie ich das "alte" (das schon vorhandene) Diagramm selektieren kann um es zu kopieren.
Um die Anpassung der Datenbezüge versuchen zu können, habe ich im Beispiel das vorhandene Diagramm manuell selektiert (angeklickt), kopiert, mit der Option "Star Object Descriptor (XML)" eingefügt und dann an seinen Platz positioniert (← recht fummelige Angegenheit).

Die Anpassung der Datenbezüge sollte eigentlich absolut simpel sein:
Austausch der zugrundeliegenden Datentabelle
von sheet 2 (das ist die Datentabelle für den Vormonat, hier also jetzt März)
auf sheet 1 (aktuelle Datentabelle, hier also jetzt für April).
Die Bereichsdefinition, also das Ergebnis, sieht in der IDE perfekt aus,
ergibt aber im Diagramm einen Verhau. (← alles im angehängten Beispiel, also "an Ort & Stelle" nachzuvollziehen und in den Kommentaren detaillierter beschrieben)
Dateianhänge
Beispiel für LO-Forum v.58'.ods
(1.88 MiB) 31-mal heruntergeladen
LO 24.2.0.3 (X86_64) auf Linux 6.6.26-1-MANJARO, gnome 45.4, (gtk 4) gtk3 für LO

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

Re: Zugriff auf und Manipulation von Diagrammen (charts) (in Calc)

Beitrag von mikele » Sa 13. Apr 2024, 14:40

Hallo,
das folgende Makro (adaptiert von https://ask.libreoffice.org/t/how-to-ma ... ro/38820/2) kopiert das Shape "Diagramm24·03" (verankert in H2) nach H35 und positioniert es wie das ursprüngliche und benennt es um.
Für den Zugriff auf das eigentliche Diagramm muss man tiefer hinein. Hier ist mal nur der Diagrammtitel geändert.

Code: Alles auswählen

sub test2

	odoc=ThisComponent
	otab=oDoc.Sheets.getByName("Grafik")
	oDp=otab.Drawpage
	for i=0 to oDp.Count-1
		if oDp.getByIndex(i).name="Diagramm24·03" then
			oShape=oDp.getByIndex(i)
		end if
	next
	oCtrl = oDoc.CurrentController
	theFr = oCtrl.Frame
	dispH = createUnoService("com.sun.star.frame.DispatchHelper")
	oCtrl.select(oshape)
	dispH.executeDispatch(theFr, ".uno:Copy", "", 0, Array())
	oCtrl.setActiveSheet(otab)
	oZiel=otab.getcellrangebyname("H35")
	dispH.executeDispatch(theFr, ".uno:Paste", "", 0, Array())
	newSh = oDoc.CurrentSelection(0)
	newSh.name="Diagramm24·04"
	pos=oziel.position
	pos.x=pos.x+oshape.size.height
	pos.y=pos.y+220
	newsh.setPosition(pos)
	odia=newsh.embeddedobject.component
	odia.title.string=newSh.name
	
end sub
Gruß,
mikele

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

Re: Zugriff auf und Manipulation von Diagrammen (charts) (in Calc)

Beitrag von mikele » Sa 13. Apr 2024, 15:03

... und nun mit neuem Bezug auf die Daten der neuen Monatstabelle (geht bestimmt noch hübscher)

Code: Alles auswählen

sub test2

	odoc=ThisComponent
	otab=oDoc.Sheets.getByName("Grafik")
	oDp=otab.Drawpage
	for i=0 to oDp.Count-1
		if oDp.getByIndex(i).name="Diagramm24·03" then
			oShape=oDp.getByIndex(i)
		end if
	next
	oCtrl = oDoc.CurrentController
	theFr = oCtrl.Frame
	dispH = createUnoService("com.sun.star.frame.DispatchHelper")
	oCtrl.select(oshape)
	dispH.executeDispatch(theFr, ".uno:Copy", "", 0, Array())
	oCtrl.setActiveSheet(otab)
	oZiel=otab.getcellrangebyname("H35")
	dispH.executeDispatch(theFr, ".uno:Paste", "", 0, Array())
	newSh = oDoc.CurrentSelection(0)
	newSh.name="Diagramm24·04"
	pos=oziel.position
	pos.x=pos.x+oshape.size.height
	pos.y=pos.y+220
	newsh.setPosition(pos)
	odia=newsh.embeddedobject.component
	odia.title.string=newSh.name
	odia_alt=otab.charts.getbyname(oShape.EmbeddedObject.EntryName)
	daten=odia_alt.getRanges
	nr_DatenTab=oDoc.Sheets.getByName("24·04").RangeAddress.Sheet
	for i=0 to ubound(daten)
		daten(i).sheet=nr_DatenTab
	next
	odia_neu=otab.charts.getbyname(newSh.EmbeddedObject.EntryName)
	odia_neu.setRanges(daten)
end sub
Gruß,
mikele

nitja
Beiträge: 176
Registriert: Di 20. Okt 2020, 15:55

Re: Zugriff auf und Manipulation von Diagrammen (charts) (in Calc)

Beitrag von nitja » Sa 13. Apr 2024, 18:31

Ja der Waahnsinn! Wie hast'n das raus gefunden!?
Also wenn auf irgendjemand Verlass ist, …
Hatte erst am Mittwoch (wieder) entdeckt, dass vor 3½ Jahren schon Du es warst, der mir die entscheidenden Hilfestellungen gegeben hat, wenn ich so richtig in der Klemme saß.

Bin gerade von einer Radltour zurück gekommen, werde mir was Du geschrieben hast, in aller Ruhe durchackern und Dir wohl immer dankbarer werden (wenn das überhaupt noch geht).

🎇 🥇 🍾
LO 24.2.0.3 (X86_64) auf Linux 6.6.26-1-MANJARO, gnome 45.4, (gtk 4) gtk3 für LO

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

Re: Zugriff auf und Manipulation von Diagrammen (charts) (in Calc)

Beitrag von mikele » So 14. Apr 2024, 10:51

Hallo,
Wie hast'n das raus gefunden!?
Die Objektinspektoren (z. B. MRI) und die mittlerweile verfügbaren ->Extras->Entwicklungswerkzeuge verraten schon mal eine Menge über die vergfügbaren Eigenschaften und Methoden und dann hilft nur viel probieren und probieren und ...
Ständig stimmte z. B. die Positionierung nicht, bis ich merkte, dass das Diagramm um 270° gedreht ist. Daher musste die Waagerechte Position um die Höhe (!) des Diagramms korrigiert werden:

Code: Alles auswählen

pos.x=pos.x+oshape.size.height
In der Vertikalen sitzt das Diagramm auch nicht direkt an der Zellgrenze sondern ist etwas nach unten verschoben

Code: Alles auswählen

pos.y=pos.y+220
Ein Diagramm ist wiederum ein sehr komplexes Objekt (praktisch ein eigenständiges Dokument mit der .Component Eigenschaft) mit wiederum Drawpage für jedes einzelne graphische Element.
Glücklicherweise kann man über die ursprüngliche Tabelle direkt auf das Diagramm (zumindest einige Teile - soweit ich es verstanden habe) zugreifen, u. a. auf die Bereiche, in denen die Daten für das Diagramm sind. Da ein Musterdiagramm existiert musste nur die Tabellennummer ausgetauscht werden, wass in dieser Schleife passiert:

Code: Alles auswählen

	daten=odia_alt.getRanges
	nr_DatenTab=oDoc.Sheets.getByName("24·04").RangeAddress.Sheet
	for i=0 to ubound(daten)
		daten(i).sheet=nr_DatenTab
	next
	odia_neu=otab.charts.getbyname(newSh.EmbeddedObject.EntryName)
	odia_neu.setRanges(daten)
Spätestens jetzt war mir klar, dass es praktisch unmöglich ist, ein Diagram via API (also ohne Dispatcher) zu kopieren.
Gruß,
mikele

nitja
Beiträge: 176
Registriert: Di 20. Okt 2020, 15:55

Re: Zugriff auf und Manipulation von Diagrammen (charts) (in Calc)

Beitrag von nitja » So 14. Apr 2024, 17:43

mikele hat geschrieben:
So 14. Apr 2024, 10:51
Die Objektinspektoren (z. B. MRI) … ¹⁾
->Extras->Entwicklungswerkzeuge … ²⁾
Ständig stimmte z. B. die Positionierung nicht, bis ich merkte, dass das Diagramm um 270° gedreht ist. Daher musste die Waagerechte Position um die Höhe (!) des Diagramms korrigiert werden: … ³⁾

Code: Alles auswählen

pos.x=pos.x+oshape.size.height
In der Vertikalen sitzt das Diagramm auch nicht direkt an der Zellgrenze … ⁴⁾
¹) Den habe ich zwar installiert, aber außer Komplettabstürzen aller offener LO-Fenster noch nichts damit zustande gebracht. Mit dem wohl falschen Verdacht, dass der nur mit Python funktioniert, dann aufgegeben. Gibt's ein Link, wo ich eine Anleitung für dessen Handhabung finden kann?
²) :shock: Das hatte ich komplett übersehen! Ist das schon lange in LO?
³) 👀Jetzt sehe ich noch mehr, wieviel Aufwand Du meinem Projekt spendierst!
… und: könnte man ein solches Diagramm denn ohne Drehung zusammenbauen?
) Das wird sich wohl ändern. Bin gerade dabei, die(se) Tabelle gründlich zu entrümpeln.
u.a.: Die ersten 2 Zeilen stammten aus dem allerersten Startversuch und sollten vor allem einen ersten "Anker" für das Datum der ersten (Druck-)Seite und von da für die weiteren liefern.
… was komplett überflüssig ist!
Jetzt sind die einzelnen Seiten quasi "autark"/"self-contained" indem ihnen nur der Namen der dazu gehörigen Datentabelle (und damit der jeweilige Monat) per 'NewPage'-Prozedur in die erste Zelle geschrieben wird.
mikele hat geschrieben:
So 14. Apr 2024, 10:51

Glücklicherweise kann man über die ursprüngliche Tabelle direkt auf das Diagramm (zumindest einige Teile - soweit ich es verstanden habe) zugreifen, u. a. auf die Bereiche, in denen die Daten für das Diagramm sind.
Da ein Musterdiagramm existiert musste nur die Tabellennummer ausgetauscht werden ⁵⁾, was in dieser Schleife ⁶⁾ passiert:

Code: Alles auswählen

	daten=odia_alt.getRanges
	nr_DatenTab=oDoc.Sheets.getByName("24·04").RangeAddress.Sheet
	for i=0 to ubound(daten)
		daten(i).sheet=nr_DatenTab
	next
	odia_neu=otab.charts.getbyname(newSh.EmbeddedObject.EntryName)
	odia_neu.setRanges(daten)
Spätestens jetzt war mir klar, dass es praktisch unmöglich ist, ein Diagramm via API (also ohne Dispatcher) zu kopieren. ⁷⁾
) Das war ja genau der Plan, auf den die "Dokument"-Struktur mit ihren Tabellen abhebt.
) Das werde ich einfacher und ohne hart codierte Tabellennamen bewerkstelligen.
) Das werde ich wohl erst vollständig verstehen, wenn ich denn den Code nachgebaut habe, den Du gestern hier rein gestellt hast.
LO 24.2.0.3 (X86_64) auf Linux 6.6.26-1-MANJARO, gnome 45.4, (gtk 4) gtk3 für LO

nitja
Beiträge: 176
Registriert: Di 20. Okt 2020, 15:55

Re: Zugriff auf und Manipulation von Diagrammen (charts) (in Calc)

Beitrag von nitja » Mo 15. Apr 2024, 17:50

mikele hat geschrieben:
So 14. Apr 2024, 10:51
… Spätestens jetzt war mir klar, dass es praktisch unmöglich ist, ein Diagram via API (also ohne Dispatcher) zu kopieren.
Überraschung!
(… und ich war selbst derart überrascht, dass ich annehme, dass meine Nachbarn das heute Nacht trotz sehr guter Schallisolierung gehört haben - jedenfalls die, die zuhause waren)

Bei der Entrümpelung der 'Grafik'-Tabelle und des zugehörigen Moduls (das jetzt 'Chart' statt 'Graph' heißt), habe ich u.a. die Positionierung des Diagramms in seinem Rahmen sorgfältig optimiert.
(Da war leerer Platz unter dem "Fuß" - bei der Bearbeitung rechts vom eingebetteten Diagramm.)
Nachdem der nun entfernt war, hat der Rahmen komplett in den Bereich der "Grafikseite24_03" gepasst, nirgends mehr deren rechte oder untere Begrenzung berührt.
Als jetzt die NewPage-Prozedur drüber gelaufen ist mit
copyRange(CellAddress der 1. Zelle des Zielbereichs, RangeAddress des Quellbereichs) …
enthielt die neue "Seite" plötzlich, erstmals einen Clone des Diagramms!

Zunächst erschien das nicht besonders stabil: bei den weiteren Versuchen ging jeder Zugriff auf die Objekte verloren oder sie verwandelten sich von "OLE"- in "Zeichnungs"-Objekte.

Inzwischen habe ich einen stabilen Zustand erreicht, nachdem ich >10 Zwischenversionen des .ods-"Dokuments" nach jeder kleinen Manipulation gesichert habe um mich dann von da weiter zu hangeln.

Es fehlt jetzt noch die Anpassung der vom neuen Diagramm referenzierten Datentabelle, aber auch ohne das stelle ich den bisherigen Code, der o.g. "Wunder" bewirkte, schon mal hier rein:

Code: Alles auswählen

REM  *****  BASIC  *****

option explicit

'	by:		nitja		last update:	24·04·15		status:	struggling with riddles
'	called by:	so far(?) only onActivate is "called" (triggered by manual actvation) from "outside"
'	calls (outside of this module):	nothing

' Public bDbgMode as boolean, sMsgFromIDE(2) as string						' declared in Module IDE, sMsg(0,1,2)=(variable,hello,crash)
dim isInitd as boolean,oDoc as object,oNmdRngs as object ',oCtrlr as object,oShapes as object
dim oGkSht as object,sMonth(1) as string,sGfkPg(1) as string,oGfkPg(1) as object,oGPgRa(1) as object
dim oChart(1) as object,nChart as integer,sChart(1) as string,oChtData(1) as object
dim vTest																	' ⚒🌩💢⚠❓🤔🪳

sub test
'	dim <local variables>
	dim oSrcRA as object, oTgtCA as object
	if not isInitd then doInit
'	processing:
	oSrcRA=oGkSht.getCellRangeByPosition(0,0,7,32).RangeAddress
	oTgtCA=oGkSht.getCellByPosition(17,0).getCellAddress
	oGkSht.copyRange(oTgtCA,oSrcRA)
	print vTest
	stop
end sub 'test

sub onActivate																' called by sheet event, triggered by manual action
	if not isInitd then doInit
end sub 'onActivate

sub doInit																	' called by onActivate
	if isInitd then exit sub
'	bDbgMode=true
	if bDbgMode and ""=sMsgFromIDE(0) then helloIDE(0)						' i.e. if previous line hasn't been commented out
	oDoc=thisComponent
	oCtrlr=oDoc.getCurrentController
	oNmdRngs=oDoc.NamedRanges
	oGkSht=oDoc.Sheets.getByIndex(0)
	oChart=oGkSht.getCharts
	sMonth=Array(Format(DateAdd("m",-1,Date),"yy·mm"),Format(Date,"yy·mm"))
	sGfkPg=Array("Grafikseite" & Replace(sMonth(0),"·","_"),"Grafikseite" & Replace(sMonth(1),"·","_"))
	if not oNmdRngs.hasByName(sGfkPg(1)) then NewPage
	
	sChart=oChart.ElementNames : nChart=UBound(oChart.ElementNames) : if 0=nChart then NewChart
'	working this far but no further: oChart is NOT the chart-"document", perhaps its frame - ALTHOUGH called "ScChartsObj" in the IDE❓
'	maybe something like this: "oChartDoc = oChart.getEmbeddedObject()" … would rerail it?
	oChart(1)=oChart.getByName(sChart(nChart)) : oChtData(1)=oChart(1).getRanges
	if 1<oChtData(1)(0).sheet then NewChart
	isInitd=true
end sub 'doInit

sub NewPage																	' called by 𝑑𝑜𝐼𝑛𝑖𝑡 (← 𝑚𝑢𝑠𝑡𝑛´𝑡 be called from here)
	dim oRng as object, oSrcRA as object, oTgtCA as object
	if bDbgMode then sMsgFromIDE(0)=" hier ist 'NewPage' in 'Chart'" & String(18,160) : helloIDE(1) : print sMsgFromIDE(1)
'	check presence of previous month's region/page to be used as a template
	if not oNmdRngs.hasByName(sGfkPg(0)) then
'		MsgBox("You'll have to define it manually!" & chr(10) & _
'		"('" & oGkSht.Name & "' is in the leftmost sheet-tab of Calc's main window )", _
'		MB_ICONSTOP,"named range '" & sGfkPg(0) & "' is missing")
		MsgBox("Der muss manuell markiert & festgelegt werden!" & chr(10) & _
		"('" & oGkSht.Name & "' ist im 1. Register links unter den Tabellen in Calcs Hauptfenster)", _
		MB_ICONSTOP,"Benannter Bereich '" & sGfkPg(0) & "' fehlt")
		stop
	end if 'graphic page for previous month missing
	oGfkPg(0)=oNmdRngs.getByName(sGfkPg(0)).getReferredCells
	oGPgRa(0)=oGfkPg(0).RangeAddress										' source range address: e.g. (0,0,7,32)
	with oGPgRa(0)
		oTgtCA=oGkSht.getCellByPosition(0,.StartRow+33).getCellAddress()	' 1. cell of target range: e.g. (0,33)|(A34)
		oGkSht.copyRange(oTgtCA,oGPgRa(0))
		oGkSht.getCellByPosition(0,.StartRow+33).setString(Format(Date,"yy·mm"))
		with oGkSht.getCellRangeByPosition(1,.StartRow+34,5,.EndRow+32)
			.clearContents(com.sun.star.sheet.CellFlags.STRING or com.sun.star.sheet.CellFlags.EDITATTR)
		end with 'oGkSht.getCellRangeByPosition(1,.StartRow+34,5,.EndRow+32)
		oRng=oGkSht.getCellRangeByPosition(0,.StartRow+33,7,.EndRow+33)
		oNmdRngs.addNewByName(sGfkPg(1),oRng.AbsoluteName,oTgtCA,0)			' cf. Pitonyak et al. 16.6.1 pgs.531-534
	end with
end sub 'NewPage

sub NewChart																' called by 𝑑𝑜𝐼𝑛𝑖𝑡 (← 𝑚𝑢𝑠𝑡𝑛´𝑡 be called from here)
'	check presence of previous month's chart
	dim nGkShtCptnRow as long
	oChart(0)=oChart.getByName(sChart(nChart-1)) : oChtData(0)=oChart(0).getRanges
	if 2<oChtData(0)(0).sheet then 'chart for previous month missing		' there's no chart for the previous month
'		MsgBox("You'll have to create it manually!", _
'		MB_ICONSTOP,"chart '" & sChart(0) & "' is missing")
		MsgBox("Das muss manuell erstellt werden!", _
		MB_ICONSTOP,"'" & sChart(0) & "' fehlt")
		stop
	end if 'chart for previous month missing
'	check presence of a preliminary, i.e. to be adjusted, chart for the current month
	oChart(1)=oChart.getByName(sChart(nChart)) : oChtData(1)=oChart(1).getRanges
	if 2=oChtData(1)(0).sheet then 'preliminary chart for current month exists
'		setting the referred ranges for the new chart will have to go here	' ⚒
	end if 'preliminary chart for current month exists
end sub 'NewChart


'	von "mikele" in https://www.libreoffice-forum.de/viewtopic.php?f=12&t=39621&p=107251#p107237
sub test2
	odoc=ThisComponent
	otab=oDoc.Sheets.getByName("Grafik")
	oDp=otab.Drawpage
	for i=0 to oDp.Count-1
		if oDp.getByIndex(i).name="Diagramm24·03" then
			oShape=oDp.getByIndex(i)
		end if
	next
	oCtrl = oDoc.CurrentController
	theFr = oCtrl.Frame
	dispH = createUnoService("com.sun.star.frame.DispatchHelper")
	oCtrl.select(oshape)
	dispH.executeDispatch(theFr, ".uno:Copy", "", 0, Array())				' kopiert Chart(0), bzw. sein "shape"
	oCtrl.setActiveSheet(otab)
	oZiel=otab.getcellrangebyname("H35")
	dispH.executeDispatch(theFr, ".uno:Paste", "", 0, Array())				' fügt die Kopie ein, …
	newSh = oDoc.CurrentSelection(0)
	newSh.name="Diagramm24·04"												' bennent sie neu …
	pos=oziel.position
	pos.x=pos.x+oshape.size.height
	pos.y=pos.y+220
	newsh.setPosition(pos)													' und positioniert sie.
'	↑	  scheint bis hier hin alles von der neuen NewPage-Routine bereits erledigt zu sein		  ↑
	odia=newsh.embeddedobject.component
	odia.title.string=newSh.name											' gibt ihr einen "Titel" - wozu? reine Demo?
end sub
LO 24.2.0.3 (X86_64) auf Linux 6.6.26-1-MANJARO, gnome 45.4, (gtk 4) gtk3 für LO

nitja
Beiträge: 176
Registriert: Di 20. Okt 2020, 15:55

Re: Zugriff auf und Manipulation von Diagrammen (charts) (in Calc)

Beitrag von nitja » Di 16. Apr 2024, 13:53

Ich denke ich habe jetzt alles beieinander, um das Projekt erfolgreich abzuschließen …
- maßgeblich durch "mikele"s Hilfestellung -
… und dieses Thema als [gelöst] zu markieren.
Allerdings z.Z. in "unendlich" vielen "Test-XY"-Prozeduren.
Um das aufzuräumen, fehlt mir noch das grundlegende Verständnis für Modul- vs. "Dokument"-Variablen, wie im Thema "… dim, private, public, global …" angesprochen.
… und damit die Lösung der Frage, wie ich den Basic-Code (nach Modulen, Variablen, u.s.w.) am effektivsten organisieren kann.
Vermutlich brauche ich nicht mal den Dispatcher, aber das wird sich verlässlich erst beim Wechsel in den Mai zeigen. Und wenn, wäre auch das keine Hürde mehr.
LO 24.2.0.3 (X86_64) auf Linux 6.6.26-1-MANJARO, gnome 45.4, (gtk 4) gtk3 für LO

nitja
Beiträge: 176
Registriert: Di 20. Okt 2020, 15:55

Re: Zugriff auf und Manipulation von Diagrammen (charts) (in Calc)

Beitrag von nitja » Mo 6. Mai 2024, 10:48

Nach einer weiteren Woche im Kampf um die Anpassung der Daten-Bezüge (setRanges) in (vorhandenen) Diagrammen (charts) muss ich jetzt doch aufgeben, das ohne weitere Hilfestellung zu bewältigen. :(
nitja hat geschrieben:
Di 16. Apr 2024, 13:53
Ich ̶d̶e̶n̶k̶e̶ dachte ich habe jetzt alles beieinander, um das Projekt erfolgreich abzuschließen …
- maßgeblich durch "mikele"s Hilfestellung -

… fehlt mir noch das grundlegende Verständnis für Modul- vs. "Dokument"-Variablen … (erledigt) ¹⁾
Vermutlich brauche ich nicht mal den Dispatcher, ²⁾
aber das wird sich verlässlich erst beim Wechsel in den Mai zeigen.
Mit den (in der 2. Aprilhälfte) neu (außerhalb der eigentlichen Arbeitsbereiche) in die Tabellen geschriebenen Informationen zur Fehlersuche (und für das bessere Verständnis der zugrunde-liegenden Mechanismen, insbesondere der Tabellenereignisse ⁺⁾) hat sich Punkt ¹) erledigt.
²) Für den Dispatcher habe ich keine Verwendung gefunden, nachdem der copyRange-Befehl mit dem neuen Layout des "Grafik"-Tabellenblatts die Form (shape) mitsamt eingebettetem Diagramm (chart)die copy&paste-Aktion genau so erledigt, wie das der Dispatcher in "mikele"s Code macht.
) Die Protokollierung der onSelect-Ergeignisse (mit der Möglichkeit onClick zu zu erkennen und zu verarbeiten) finden sich auf den Tabellenblättern mit den Daten (24·04, 24.03). Im "Grafik"-Tabellenblatt leistet das onClick gute Dienste.

Ich kann aber nicht nachvollziehen, wie "mikele"s Code die Anpassung der chart ranges bewerkstelligt. D.h. ich meine zu verstehen, wie der gemeint ist - er funktioniert aber nicht in meiner .ods-Datei (angehängt).
Die aufgeworfenen Fragen sind an Ort & Stelle in den Kommentaren zum Code enthalten.
In der Datei sind die verwendeten Schriftarten nicht eingebettet und es würde mich interessieren, wie die Tabellen bei anderen aussehen.
Auf meinem Rechner präsentiert sich das "Grafik"-Tabellenblatt z.B. so:
Bildschirmfoto vom 2024-05-06 10-38-56.png
Bildschirmfoto vom 2024-05-06 10-38-56.png (96.18 KiB) 404 mal betrachtet
Bildschirmfoto vom 2024-05-06 10-40-52.png
Bildschirmfoto vom 2024-05-06 10-40-52.png (93.68 KiB) 404 mal betrachtet
Dateianhänge
Beispiel für LO-Forum v.44w - ohne eingebette Schriften.ods
(89.74 KiB) 26-mal heruntergeladen
LO 24.2.0.3 (X86_64) auf Linux 6.6.26-1-MANJARO, gnome 45.4, (gtk 4) gtk3 für LO

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