BITTE helfen Sie uns 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. 🤗

[gelöst] Was ist der Diagramm Name?

Alles zur Programmierung im LibreOffice.
Antworten
Oscar B
Beiträge: 28
Registriert: Fr 15. Jan 2021, 13:49

[gelöst] Was ist der Diagramm Name?

Beitrag von Oscar B » Di 30. Mär 2021, 18:42

Hallo!
Ich bin im Moment daran bei einem schon bestehenden Diagramm den Zellbereich zu ändern. Mit folgendem Code funktioniert das auch schon:

Code: Alles auswählen

oDoc = ThisComponent 
oSheet = oDoc.sheets.getbyname("Tabelle1")
oChart = oDoc.Sheets(0).Charts.getByIndex(0)
oData = Array (oSheet.getCellRangeByName("A1:A50").getRangeAddress(), _
oSheet.getCellRangeByName("B1:B50").getRangeAddress())
oChart.setRanges(oData)
Nun möchte ich mein Diagramm aber nicht per Index referenzieren, weil in dem Dokument sehr viele Diagramm sind.
In einigen Beiträgen zum Thema Diagramme in Makros findet man folgenden Code:

Code: Alles auswählen

oChart = oDoc.Sheets(0).Charts.getByName("Diagrammname")
Aber: Wo finde ich diesen Diagrammnamen?
Der Grafikname, den man über Rechtsklick -> Name ändern kann scheint es nicht zu sein und auch mit dem Diagrammtitel findet er das Diagramm nicht

Vielen Dank im Voraus und viele Grüße
Oscar
Zuletzt geändert von Oscar B am Mi 31. Mär 2021, 14:32, insgesamt 1-mal geändert.
LibreOffice Version 7.1.1.2 (x64) - Windows 10 (x64)

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

Re: Was ist der Diagramm Name?

Beitrag von nitja » Di 30. Mär 2021, 19:16

Oscar B hat geschrieben:
Di 30. Mär 2021, 18:42
… Der Grafikname, den man über Rechtsklick -> Name ändern kann scheint es nicht zu sein …
Der Name bezeichnet die drawpage, nicht das chart.
Den Namen des charts kann man als <drawpage-object>.PersistName auslesen.
Mit charts.getByName() habe ich tagelang gekämpft, dann aufgegeben. Geht eben auch anders (s.o.).
LO 24.2.0.3 (X86_64) auf Linux 6.6.19-1-MANJARO, gnome 45.4, (gtk 4) gtk3 für LO

Oscar B
Beiträge: 28
Registriert: Fr 15. Jan 2021, 13:49

Re: Was ist der Diagramm Name?

Beitrag von Oscar B » Di 30. Mär 2021, 19:47

Ok vielen Dank!
Jetzt weiß ich schonmal, dass die Diagramme einfach mit Object 1, 2, 3 usw. durchnummeriert werden!
Aber wie soll ich meine Diagramme im Makro jetzt genau referenzieren?
Viele Grüße
Oscar

Edit: Oder anders gefragt: Wie kann ich diesen Namen vom Chart ändern?
LibreOffice Version 7.1.1.2 (x64) - Windows 10 (x64)

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

Re: Was ist der Diagramm Name?

Beitrag von mikele » Di 30. Mär 2021, 21:23

Hallo,
den Namen der Charts (und auch Zeichnungen etc.) verrät dir der Navigator.
Den Namen kannst du ändern, wenn du das Diagramm einfach anklickst und es dann per Kontextmenü oder Menü Format ->Name benennst.
Gruß,
mikele

Oscar B
Beiträge: 28
Registriert: Fr 15. Jan 2021, 13:49

Re: Was ist der Diagramm Name?

Beitrag von Oscar B » Di 30. Mär 2021, 21:29

Leider bekomme ich mit der im ersten Beitrag genannten Methode und dem Namen, den ich Festgelegt habe (und der im Navigator) steht die Fehlermeldung, die ja auch mein eigentliches Problem war und ist:

BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.container.NoSuchElementException
Message: .

Trotzdem Danke fürs Antworten
Oscar
LibreOffice Version 7.1.1.2 (x64) - Windows 10 (x64)

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

Re: Was ist der Diagramm Name?

Beitrag von nitja » Di 30. Mär 2021, 22:42

mikele hat geschrieben:
Di 30. Mär 2021, 21:23
… den Namen der Charts (und auch Zeichnungen etc.) verrät dir der Navigator.
Das stimmt eben genau für charts nicht. Der Navigator zeigt Dir den Namen des drawpage-Elements, nicht den des charts.

@ Oscar:
Versuchs mal mit so etwas:

Code: Alles auswählen

sub getChart(optional sDpName)
	dim i as integer, sChartName as string, oChart as object
	if isMissing(sDpName) then sDpName = "chart05"
	with thisComponent.sheets(0)
		for i=0 to .drawPage.count-1
			if sDpName=.drawPage(i).name then exit for
		next i
		sChartName = .drawPage(i).persistName
		for i=0 to .charts.count-1
			if sChartName=.charts(i).name then exit for
		next i
		oChart = .charts(i)
	end with
end sub 
sDpName ist der Name des drawpage-Elements, wie es der Navigator zeigt.
Das "optional" und "isMissing(…" steht da nur um es ohne weitere Eingabe lauffähig, testbar zu machen.
Auch das sheet, hier zu Testzwecken sheet(0) (das in einer meiner calc-Anwendungen zig Diagramme enthält), musst natürlich an Dein Projekt anpassen.
Funktioniert bei mir jedenfalls einwandfrei.
LO 24.2.0.3 (X86_64) auf Linux 6.6.19-1-MANJARO, gnome 45.4, (gtk 4) gtk3 für LO

Oscar B
Beiträge: 28
Registriert: Fr 15. Jan 2021, 13:49

Re: Was ist der Diagramm Name?

Beitrag von Oscar B » Di 30. Mär 2021, 23:11

Hallo!
Das sieht auf den ersten Blick wirklich super und nachvollziehbar aus!
Ich komme erst Morgen dazu, das wirklich zu testen und stelle das Thema auch danach erst auf gelöst, aber ich denke mal damit ist alles klar!
Vielen Dank an alle!
Oscar
LibreOffice Version 7.1.1.2 (x64) - Windows 10 (x64)

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

Re: Was ist der Diagramm Name?

Beitrag von mikele » Di 30. Mär 2021, 23:31

Hallo,
Das stimmt eben genau für charts nicht.
Da hast du Recht.
Gruß,
mikele

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

Re: Was ist der Diagramm Name?

Beitrag von nitja » Mi 31. Mär 2021, 13:52

Oscar B hat geschrieben:
Di 30. Mär 2021, 23:11
Das sieht auf den ersten Blick wirklich super und nachvollziehbar aus!
Hier noch eine Version, die sich besser in Deinen Programmablauf fügt. (Und, oh Wunder, die getByName-Methode funktioniert, mit dem richtigen Namen, tatsächlich!):

Code: Alles auswählen

sub getChart
    dim test
    test = oChartByName("chart05")
end sub

function oChartByName(sDrawPageName as string) as object
    dim i as integer
    with thisComponent.sheets(0)
        for i=0 to .drawPage.count-1
            if sDrawPageName=.drawPage(i).name then exit for
        next i
        oChartByName = .charts.getByName(.drawPage(i).persistName)
    end with
end function
(Das sub dient nur dem Testen.)
LO 24.2.0.3 (X86_64) auf Linux 6.6.19-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