[gelöst ✔] Zugriff auf und Manipulation von Diagrammen (charts) (in Calc)
Verfasst: Sa 6. Apr 2024, 14:23
Dies ist mein (ab heute, 6.2.'24) auf Fragen zur IDE und Ergänzungen zur Behandlung von Doppelklick … folgendes Thema.
Bei Unklarheiten, was mit Formulierungen hier drin gemeint ist (was ich freilich zu vermeiden suche), mag ein Blick in das Vorgänger-Thema helfen.
Aktuell versuche ich das Diagramm für den vorigen Monat ("Diagramm24·03") (quasi als Vorlage) zu kopieren und auf die (Druck-)Seite der "Grafik"-Tabelle für den aktuellen Monat ("Grafikseite24_04") einzufügen.
Dabei gelingt mir noch nicht einmal der Zugriff auf das schon vorhandene Diagramm.
· ·
Der Code, der dem einzigen Beispiel zu dem Thema (Zugriff auf ein schon vorhandenes Diagramm …),
das ich bei Pitonyak et al.¹⁾ 16.13 Listing 497 Seite 576 gefunden habe,
nachempfunden ist, …
… scheitert schon in Zeile 68 (… .hasByName) obwohl ich das ("Diagramm24·03") im Bildschirmfoto hier drüber ja sehe.
¹) "Pitonyak et al." bezieht im ganzen Thema auf den hier velinkten url.
Bei Unklarheiten, was mit Formulierungen hier drin gemeint ist (was ich freilich zu vermeiden suche), mag ein Blick in das Vorgänger-Thema helfen.
Aktuell versuche ich das Diagramm für den vorigen Monat ("Diagramm24·03") (quasi als Vorlage) zu kopieren und auf die (Druck-)Seite der "Grafik"-Tabelle für den aktuellen Monat ("Grafikseite24_04") einzufügen.
Dabei gelingt mir noch nicht einmal der Zugriff auf das schon vorhandene Diagramm.
· ·
Der Code, der dem einzigen Beispiel zu dem Thema (Zugriff auf ein schon vorhandenes Diagramm …),
das ich bei Pitonyak et al.¹⁾ 16.13 Listing 497 Seite 576 gefunden habe,
nachempfunden ist, …
Code: Alles auswählen
REM ***** BASIC *****
option explicit
' library: Beispiel module: Graph by: nitja last update: 24·04·06 status: very start of design
' called by: so far(?) only onActivate is "called" (triggered by manual activation) from "outside"
' calls (outside of this module): nothing
const sMonthTmplt="99·99"
dim isInitd as boolean,oDoc as object,oNmdRngs as object,oCharts as object,oCtrlr as object,oGkSht as object
dim sMonth(1) as string,sGfkPg(1) as string,oGfkPg(1) as object,oGPgRa(1) as object
dim oChart(1) as object,sChart(1) as string
dim vTest ' ⚒🌩💢⚠❓🤔🪳
sub test
' dim <local variables>
' processing:
vTest="dummy"
print vTest
stop
end sub 'test
sub onActivate
if not isInitd then doInit
end sub 'onActivate
sub doInit
if isInitd then exit sub
oDoc=thisComponent
oNmdRngs=oDoc.NamedRanges
oGkSht=oDoc.Sheets.getByIndex(0)
oCharts=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),"·","_"))
sChart=Array("Diagramm" & sMonth(0),"Diagramm" & sMonth(1))
if not oNmdRngs.hasByName(sGfkPg(1)) then NewPage
if not oCharts.hasByName(sChart(1)) then NewChart
isInitd=true
end sub 'doInit
sub NewPage
dim oRng as object, oRfCellAddr as object
' 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
oRfCellAddr=oGkSht.getCellByPosition(0,0).getCellAddress()
oGfkPg(0)=oNmdRngs.getByName(sGfkPg(0)).getReferredCells
oGPgRa(0)=oGfkPg(0).RangeAddress
with oGPgRa(0) 'create new region/page for the new month
oRng=oGkSht.getCellRangeByPosition(.StartColumn,.StartRow+33,.EndColumn,.EndRow+33)
oNmdRngs.addNewByName(sGfkPg(1),oRng.AbsoluteName,oRfCellAddr,0) 'cf. Pitonyak et al. 16.6.1 pgs.531-534
oGfkPg(1)=oNmdRngs.getByName(sGfkPg(1)).getReferredCells
' copy & paste will have to be specified here
' formulae will already be adjusted for the third and later months, when copying them from the previous month in the sheet (done manually for the second one)
' data will have to be reviewed and automatic adjustment will have to be specified here
end with
end sub 'NewPage
sub NewChart
' check presence of previous month's chart to be used as a template
if not oCharts.hasByName(sChart(0)) then
' 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
oChart(0)=oCharts.getByName(sChart(0))
with oChart(0)
print "check " & sChart(0)
end with
end sub 'NewChart
¹) "Pitonyak et al." bezieht im ganzen Thema auf den hier velinkten url.