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