Hallo Jens,
ganz so einfach ist das Thema auch nicht, wie Du es dir vorstellst. Ich hatte wohl schon so einen verdacht, musste aber erstmal nach einer geeigneten Datei in meiner Krabbelkiste suchen. Bin auch fündig geworden.
In diesem Falle muss erst der
oComponentWalker aufgerufen und abgearbeitet werden. Dieser kann nämlich alle geöffneten Dateien ansprechen. Jedoch muss er vorher wissen mit welcher Datei genau weiter gearbeitet werden soll. Dazu muss der komplette Pfad und der Dateiname einer Variablen übergeben werden. Was in deinem Falle so aussehen würde.
Und erst danach kann der
oComponentWalker arbeiten.
Code: Alles auswählen
dim myFileProp(0) as New com.sun.star.beans.PropertyValue
oComponentWalker = oComponents.createEnumeration()
Do While oComponentWalker.hasMoreElements()
oComponent = oComponentWalker.nextElement()
if oComponent.getURL() = sExterneURL then
gefunden = true
'print oComponent.getURL()'
end if
Loop
Und je nachdem was dann in
gefunden steht, wird die Externe Datei angesprochen.
Code: Alles auswählen
if gefunden = true then
oEXTDoc = StarDesktop.loadComponentFromURL(sExterneURL, "_default", 0, myFileProp())
else
oEXTDoc = StarDesktop.loadComponentFromURL(sExterneURL, "_blank", 0, myFileProp())
end if
Wie Du siehst ist der 2. Parameter von
loadComponentFromURL jetzt anders. Einmal _default, und einmal _blank. Aber nur durch die Hilfe des
oComponentWalker kommt jetzt das zu tragen, was ich vorher schon leicht angemäckert hatte. Du warst so gesehen schon fast auf dem richtigen Wege, jedoch ist dieser spezielle zugriff auf eine Datei halt etwas anders und deshalb brauchst Du den
oComponentWalker. Mir ist momentan keine andere Methode bekannt um dein Ziel zu erreichen. Am sichersten fähst Du mit ihm.
Hier mal der komplette Beispiel-Code.
Code: Alles auswählen
Public oEXTDoc As Object, oDoc as Object
Public oDummy()
Public gefunden as String
'**************************************************************************************'
Sub Copy_Aeras_2_Sheet_2
on Error goto Ende ' Für den Fall eines Fehler zu der Sprungmarke Ende springen.'
GlobalScope.BasicLibraries.LoadLibrary("Tools")
oDoc = thisComponent
oComponents = StarDesktop.getComponents()
gefunden = ""
sExterneURL = "file:///E:/OFFICE/Array_Spielereien_0.ods" 'Pfad zum Dokument anpassen'
'############ Prüfen ob Dokument schon geöffnet ist.'
'############ Wenn nein, dann wird es per _blank geöffnet.'
'############ Wenn ja, dann wird per _default darauf zugegriffen.'
dim myFileProp(0) as New com.sun.star.beans.PropertyValue
oComponentWalker = oComponents.createEnumeration()
Do While oComponentWalker.hasMoreElements()
oComponent = oComponentWalker.nextElement()
if oComponent.getURL() = sExterneURL then
gefunden = true
'print oComponent.getURL()'
end if
Loop
if gefunden = true then
oEXTDoc = StarDesktop.loadComponentFromURL(sExterneURL, "_default", 0, myFileProp())
else
oEXTDoc = StarDesktop.loadComponentFromURL(sExterneURL, "_blank", 0, myFileProp())
end if
'############### Ende Prüfung #############################'
oExternTabelle3 = oEXTDoc.Sheets().getByName("Tabelle3") 'Tabellenblatt *Tabelle3* in der auszulesenden Datei defenieren.'
oInternTabelle2 = oDoc.Sheets().getByName("Tabelle2")' Tabellenblatt *Tabelle2* in dieser Datei defenieren.'
dim aDatArray()' Einen Datenbereich kopieren'
aDatArray = oExternTabelle3.getCellRangeByName("A1:B11").getDataArray
oInternTabelle2.getCellRangeByName("A1:B11").setDataArray(aDatArray)
Ende: ' Falls ein Fehler aufgetreten ist, hier her springen und Makro beenden.'
END SUB
Ich habe da ein paar Zeilen zum Kopieren von einer Externen Datei zu der aktuellen Datei (die mit diesem Makro) eingebaut. Und es funktioniert bei mir fehlerfrei. Es spielt keine Rolle ob die Datei schon geöffnet ist, oder nicht. Wenn sie nicht geöffnet ist, dann wird sie halt geöffnet und anschließend wird kopiert.
Der Grund-Code ist nicht von mir, den hatte ich wo anders her. Ich habe ihn lediglich auf die schnelle an die geforderte Situation angepasst. Hoffe Du komst damit zu recht.
Gruß
balu