Hallo,
in der Annahme, dass der Dateiname der zu öffnenden Datei immer in Held.FA9 steht und beide Dateien denselben Aufbau (Tabellennamen) haben sollte folgende Variante funktionieren:
Code: Alles auswählen
Sub Main
'Zugriff auf dieses Dokument
oDoc=ThisComponent
'Auslesen des Dateinamens für den Datenimport
url=convertToUrl(oDoc.Sheets.getByName("Held").getCellRangeByName("FA9").String)
'Öffnen der Quelldatei, versteckt
Dim myFileProp(0) as New com.sun.star.beans.PropertyValue
myFileProp(0).name="Hidden"
myFileProp(0).value=true 'für die praktische Arbeit kann später True gesetzt werden, um die Datei versteckt zu öffnen
oQuellDocument = StarDesktop.loadComponentFromURL(url, "_blank", 0, myFileProp() )
'Erfassen der Zellbereiche, die Importiert werden sollen
'als Array von Arrays: für jede Tabelle ein Array
'das erste Element des Arrays gibt den Tabellennamen an
'da es eigentlich eine extrem lange Zeile wird, muss am Ende jeder Array-Zeile nach dem Komma ein Unterstich gesetzt werden
aZellen=Array(_
Array("Held", "EL3:EL51", "AE3:AE15", "AH1", "B17"),_
Array("Fähigkeiten", "O16:P31"),_
) 'Ende des Arrays
For k=0 to ubound(aZellen)
'Zugriff auf die Tabelle in Zieldatei
oZiel=oDoc.Sheets.getByName(aZellen(k)(0))
oQuelle=oQuellDocument.Sheets.getByName(aZellen(k)(0))
'Durchlauf durch alle Bereiche
For i=1 to ubound(aZellen(k))
oZiel.getCellRangeByName(aZellen(k)(i)).setDataArray(oQuelle.getCellRangeByName(aZellen(k)(i)).getDataArray)
Next
Next
'Schließen des Quelldokuments
oQuellDocument.close (false)
End Sub
In dem Array aZellen legts du fest, welche Tabellen und welche Bereiche importiert werden sollen.
Wenn es allerdings so ist, wie du abgedeutet hast, könnte folgendes Makro noch effektiver sein:
Code: Alles auswählen
Sub Main2
'Zugriff auf dieses Dokument
oDoc=ThisComponent
'Auslesen des Dateinamens für den Datenimport
url=convertToUrl(oDoc.Sheets.getByName("Held").getCellRangeByName("FA9").String)
'Öffnen der Quelldatei, versteckt
Dim myFileProp(0) as New com.sun.star.beans.PropertyValue
myFileProp(0).name="Hidden"
myFileProp(0).value=true 'für die praktische Arbeit kann später True gesetzt werden, um die Datei versteckt zu öffnen
oQuellDocument = StarDesktop.loadComponentFromURL(url, "_blank", 0, myFileProp() )
'Durchlauf durch alle Tabellen
For k=0 to oDoc.Sheets.Count-1
'Zugriff auf die Tabelle in Zieldatei
oZiel=oDoc.Sheets(k)
oQuelle=oQuellDocument.Sheets(k)
'Liste aller Bereiche mit gleicher Formatierung
obereiche=oZiel.getCellFormatRanges
'Durchlauf durch alle Bereiche
For i=0 to obereiche.count-1
oBereich=obereiche.getbyindex(i)
'Prüfen, ob Hntergrund gelb und nicht gesperrt
if obereich.CellBackColor=16777113 and obereich.CellProtection.islocked=False then
oBereich.setDataArray(oQuelle.getCellRangeByName(oBereich.AbsoluteName).getDataArray)
end if
Next
Next
'Schließen des Quelldokuments
oQuellDocument.close (false)
End Sub
Hier werden alle Tabellen durchlaufen und in jeder Tabelle die Zellbereiche gesucht, deren Hintergrund gelb ist und die nicht gesperrt sind. In diese werden dann die Daten der anderen Datei importiert.