Seite 1 von 1
Zugriff zu 2 ODS-Dateien in einem Makro? [GELÖST]
Verfasst: Fr 16. Feb 2024, 16:27
von Rolf_V
Ich will mit einem Makro eine zweite ODS-Datei öffnen und Zellinhalte aus einer Datei in die andere Datei kopieren. Das Öffnen funktioniert schon, aber es gibt keinen Zugriff auf die zweiten Datei.
Hier ist der relevante Teil des Makros, das von der ersten Datei gestartet wird:
Code: Alles auswählen
Sub Main
msgbox ReadCell("B6")
OpenFile("home/rolf/Downloads/New.ods")
msgbox ReadCell("A1")
' ...usw...
End Sub
sub OpenFile(Name as String)
Dim myProp(0) as new com.sun.star.beans.PropertyValue
myProp(0).name="MacroExecutionMode"
myProp(0).value = 0
url=converttourl(Name)
oDocument = StarDesktop.loadComponentFromURL(url, "_blank", 0, myProp() )
end sub
function ReadCell(Adr as String)
dim myString
oDocument = thisComponent
oSheet = oDocument.sheets(0)
oZelle = oSheet.getCellRangeByName(Adr)
myString=oZelle.string
ReadCell = myString
end Function
Msgbox zeigt zunächst richtig den Inhalt der Zelle B6 an, aber nach dem Öffnen der zweiten Datei ist msgbox leer.
Wie kann ich den Zugriff abwechselnd auf beide Dateien einstellen, d.h. dass thisComponent auf die jeweilige gewünschte Datei zeigt?
FYI: LO läuft unter Linux
Re: Zugriff zu 2 ODS-Dateien in einem Makro?
Verfasst: Fr 16. Feb 2024, 17:52
von mikele
Hallo,
ThisComponent zeigt immer auf die datei aus der heruas das Makro gestartet wurde.
In der Makrokonstellation wäre es sinnvoll aus der Sub OpenFile eine Function zu machen.
Code: Alles auswählen
Sub Main
oDoc1=ThisComponent
msgbox ReadCell("B6", oDoc1)
oDoc2=OpenFile("home/rolf/Downloads/New.ods")
msgbox ReadCell("A1", oDoc2)
' ...usw...
End Sub
function OpenFile(Name as String) as object
Dim myProp(0) as new com.sun.star.beans.PropertyValue
myProp(0).name="MacroExecutionMode"
myProp(0).value = 0
url=converttourl(Name)
OpenFile = StarDesktop.loadComponentFromURL(url, "_blank", 0, myProp() )
end function
function ReadCell(Adr as String, oDocument as object)
dim myString
oSheet = oDocument.sheets(0)
oZelle = oSheet.getCellRangeByName(Adr)
myString=oZelle.string
ReadCell = myString
end Function
Nebenbei ist mir der Vorteil der function ReadCell nicht so ganz klar.
Ich würde es einfach so gestalten
Code: Alles auswählen
Sub Main
oDoc1=ThisComponent
msgbox oDoc1.Sheets(0).getCellRangeByName("B6").String
oDoc2=OpenFile("home/rolf/Downloads/New.ods")
msgbox oDoc2.Sheets(0).getCellRangeByName("A1").String
' ...usw...
End Sub
function OpenFile(Name as String) as object
Dim myProp(0) as new com.sun.star.beans.PropertyValue
myProp(0).name="MacroExecutionMode"
myProp(0).value = 0
url=converttourl(Name)
OpenFile = StarDesktop.loadComponentFromURL(url, "_blank", 0, myProp() )
end function
Re: Zugriff zu 2 ODS-Dateien in einem Makro?
Verfasst: Fr 16. Feb 2024, 18:12
von karolus
Hallo
Die Basic-funktion »ThisComponent« verhält sich unterschiedlich, je nach dem von
WO sie aufgerufen wird:
- ist die aufrufende Prozedur in ein Dokument eingebettet|gespeichert gibt sie IMMER dieses Dokument zurück
- in allen anderen Fällen gibt sie jeweils das Dokument zurück das MOMENTAN im Fokus ist!
Vergleiche bitte die Ausgaben von folgenden Code, je nach dem ob du ihn unter
⇒MeineMakros… oder
⇒xyz.ods… speicherst!
Code: Alles auswählen
Sub Main
this_doc = ThisComponent
print this_doc.Title
other_doc = StarDesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, array() )
print other_doc.Title
print thisComponent.Title
End Sub
Als Konsequenz solltest du eigentlich immer die MEHRMALIGE Verwendung von »ThisComponent« vermeiden!
@all: das laden eines Dokumentes mit der Option
"_blank" erzeugt ggf. einen zweiten Frame falls das betreffende Dokument bereits geladen war, besser ist in dem Fall die Option
"_default"
Re: Zugriff zu 2 ODS-Dateien in einem Makro?
Verfasst: Fr 16. Feb 2024, 21:28
von Rolf_V
mikele hat geschrieben: ↑Fr 16. Feb 2024, 17:52
Hallo,
ThisComponent zeigt immer auf die datei aus der heruas das Makro gestartet wurde.
In der Makrokonstellation wäre es sinnvoll aus der Sub OpenFile eine Function zu machen.
Hallo mikely,
vielen Dank. Genau das war es, was mir noch gefehlt hat. Auch die Kurzversion zum Auslesen von Zellen gefällt mir.
Re: Zugriff zu 2 ODS-Dateien in einem Makro?
Verfasst: Fr 16. Feb 2024, 21:31
von Rolf_V
karolus hat geschrieben: ↑Fr 16. Feb 2024, 18:12
Hallo karolus,
danke für die Hinweise. Werde ich berücksichtigen. Leider steht sowas nicht in den offiziellen Anleitungen (oder ist sehr schwer zu finden)