nitja hat geschrieben: ↑Do 4. Apr 2024, 19:31
… gibt's auch eine Möglichkeit die Einstellung auszulesen?
Obwohl mich das aus reiner Neugier natürlich interessiert, ist es für das Projekt weniger wichtig. Letztlich brauche ich das Setzen nur im Modul Data, wenn beim Monatswechsel eine neue Daten-Tabelle angelegt wird. Weiß also, dass dafür noch nichts gesetzt sein kann.
Das eine, erste Mal für die Grafik-Tabelle habe ich das Setzen der Tabellenereignisse ohnehin beim ersten Anlegen manuell per UI gemacht und brauche das dort nicht mehr.
Für das neue Datenblatt/Monatsprotokoll sieht das jetzt so aus:
Code: Alles auswählen
sub NewMonth
dim args(1) As New com.sun.star.beans.PropertyValue
args(0).Name = "EventType" : args(0).Value = "Script" : args(1).Name = "Script"
if not isInitd then doInit
oDtSht=oDoc.Sheets.getByIndex(1)
with oDtSht
args(1).Value = "vnd.sun.star.script:Beispiel.Data.onActivate?language=Basic&location=document"
.Events.replaceByName("OnFocus",args())
args(1).Value = "vnd.sun.star.script:Beispiel.Data.onDblClk?language=Basic&location=document"
.Events.replaceByName("OnDoubleClick",args())
.getCellByPosition(0,0).setString(Format(Date,"yyyy"))
.getCellByPosition(1,0).setString(Format(Date,"mmm"))
end with 'oDtSht
lRow=2
oCtrlr.setActiveSheet(oDtSht)
end sub 'NewMonth
… und funktioniert prächtig.
Momentan kämpfe ich um die neue Seite in der "Grafik"-Tabelle (wie sie beim Ausdrucken oder pdf-Export erscheinen würde) für den neuen Monat. Der Kampf um copy/adjust/paste der entsprechenden benannten Bereiche ist in Bezug auf die eigentlichen Inhalte mit get/setFormulaArray schon einigermaßen gediehen.
Bei der Formatierung kam ich erst wieder gar nicht weiter, bis ich doch den Makro-Recorder darauf losgelassen habe (den ich bislang noch nie dazu überreden konnte, mehr als die ersten 4, mit Kommentaren 8 Zeilen zu speichern):
Code: Alles auswählen
sub recorded
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$3:$H$35"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$A$36:$H$68"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
rem ----------------------------------------------------------------------
dim args4(5) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Flags"
args4(0).Value = "T"
args4(1).Name = "FormulaCommand"
args4(1).Value = 0
args4(2).Name = "SkipEmptyCells"
args4(2).Value = false
args4(3).Name = "Transpose"
args4(3).Value = false
args4(4).Name = "AsLink"
args4(4).Value = false
args4(5).Name = "MoveMode"
args4(5).Value = 4
dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args4())
end sub
Interessant wird es beim args4 (das davor bezieht sich auf die Bereiche, die ich (mittlerweile) auch direkt programmieren kann). Muss ich mich über Flags=T schlau machen … dieser "MoveMode" ist mir deutlich schleierhafter.
Zuletzt steht dann noch an, das neue Monats-Diagramm an die neue Datentabelle anzupassen. (Aber das sollte mit dem Austausch des Tabellennamens schon fast erledigt sein.)