Seite 1 von 1

[gelöst] Was ist der Diagramm Name?

Verfasst: Di 30. Mär 2021, 18:42
von Oscar B
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

Re: Was ist der Diagramm Name?

Verfasst: Di 30. Mär 2021, 19:16
von nitja
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.).

Re: Was ist der Diagramm Name?

Verfasst: Di 30. Mär 2021, 19:47
von Oscar B
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?

Re: Was ist der Diagramm Name?

Verfasst: Di 30. Mär 2021, 21:23
von mikele
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.

Re: Was ist der Diagramm Name?

Verfasst: Di 30. Mär 2021, 21:29
von Oscar B
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

Re: Was ist der Diagramm Name?

Verfasst: Di 30. Mär 2021, 22:42
von nitja
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.

Re: Was ist der Diagramm Name?

Verfasst: Di 30. Mär 2021, 23:11
von Oscar B
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

Re: Was ist der Diagramm Name?

Verfasst: Di 30. Mär 2021, 23:31
von mikele
Hallo,
Das stimmt eben genau für charts nicht.
Da hast du Recht.

Re: Was ist der Diagramm Name?

Verfasst: Mi 31. Mär 2021, 13:52
von nitja
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.)