Es sollen div. Daten aus mehreren ods-Dateien in einem Verzeichnis ausgelesen werden und in die aktuelle ods-Datei geschrieben werden (Zweck dafür ist eine spätere Auswertung).
Die Quelldateien liegen alle in einem best. Verzeichnis, den Pfad dazu habe ich in der Zieldatei in der Zelle A7 (Formel: =$C$1&B7&".ods") hinterlegt (wenn es im Code geht, auch recht, ich hab es in einem anderem Programm mal so lösen müssen und deswegen jetzt wieder so verwendet).
In diesem Verzeichnis sind ca. 100 Dateien mit Namen 101.ods, 103.ods, 116.ods usw. (es sind also nicht alle fortlaufend nummeriert).
Welche Dateien ausgelesen werden sollen, ist in meiner Zieldatei in der Spalte B festgelegt: dort stehen die jew. Zahlen ab Zeile 7.
Problem: in der Quelldatei stehen die Daten untereinander in der Spalte, in der Zieldatei sollen sie nebeneinander in der Zeile stehen.
Was mein Makro jetzt schon mal kann:
Datei öffnen, deren Zahl in der Zelle B7 steht,
Daten (Name) aus dem dritten Tabellenblatt (Index 2), Zelle B1 auslesen und in die Zieldatei in Zelle C7 schreiben,
Daten aus dem dritten Tabellenblatt (Index 2), Zelle B61 auslesen und in die Zieldatei in Zelle S7 schreiben,
Daten aus dem dritten Tabellenblatt (Index 2), Zelle B62 auslesen und in die Zieldatei in Zelle T7 schreiben,
Daten aus dem dritten Tabellenblatt (Index 2), Zelle B63 auslesen und in die Zieldatei in Zelle U7 schreiben,
....
Daten aus dem dritten Tabellenblatt (Index 2), Zelle B72 auslesen und in die Zieldatei in Zelle AD7 schreiben,
Quelldatei wieder schließen.
1. Ist ziemlich umständlich, und ich frage mich, ob es nicht irgendwie einfacher ginge, da ja aus der Quelldatei 12 direkt untereinander stehende Werte ausgelesen werden und in der Zieldatei nebeneinander stehen sollen.
2. Es sollen auch noch die anderen Dateien alle ausgelesen werden und zwar so lange, bis eine Zelle in Spalte B keinen Wert mehr aufweist (Die Daten in der Quelldatei sind immer an der gleichen Stelle, in der Zieldatei entsprechend eine Zeile weiter unten).
3. Falls eine Zahl in der Spalte B steht und die entsprechende Datei nicht vorhanden ist, sollte das Skript einfach mit der nächsten Zeile weitermachen.
Leider steh ich mit Schleifen etwas auf Kriegsfuß und hab grad keinen rechten Schimmer an welcher Stelle meines Codes ich das anpacken soll.
hier mal mein Code:
Code: Alles auswählen
Sub getDatafromFile
Dim FileProperties(3) As New com.sun.star.beans.PropertyValue
FileProperties(0).Name = "FilterName"
FileProperties(0).Value ="scalc: Text - txt - csv (StarOffice Calc)"
FileProperties(1).Name = "USE_CONFIG"
FileProperties(1).Value ="3"
FileProperties(2).Name = "Hidden" 'Datei wird versteckt geöffnet
FileProperties(2).Value = True
FileProperties(3).Name = "ReadOnly" 'Datei wird schreibgeschützt geöffnet
FileProperties(3).Value = True
os_Sheet=thiscomponent.sheets(0) 'Tabellenblatt Start
REM Dateiauswahl Eingabefeld -------------------------------------------------------------
myDoc = thisComponent
mySheet = myDoc.sheets(0)
myCell = mySheet.getCellRangeByName("A7") 'Variable auf Zelle A7 setzen
myString = myCell.String 'Zellinhalt auslesen
Url_quelle=converttourl(myString) 'Quelldokument festlegen auf Pfad-/Dateinamenangaben aus Zelle A7
if fileexists(Url_quelle) = false then 'Prüfung ob Datei vorhanden
msgbox "Datei nicht vorhanden" 'Messagebox ausgeben
exit sub
endif
oq_document = StarDesktop.loadComponentFromURL(Url_quelle, "_blank", 0, FileProperties())
oq_sheet=oq_document.sheets(2) 'Tabellenblatt 3 aus Quelle
oq_range=oq_sheet.getCellRangeByName("B1") 'Name aus Quelle
oq_array=oq_range.getDataArray()
os_range=os_Sheet.getCellRangeByName("C7") 'Ziel Name
os_range.setDataArray(oq_array)
REM ÜberStunden --------------------------------------------------------------------------
oq_range=oq_sheet.getCellRangeByName("B61")
oq_array=oq_range.getDataArray()
os_range=os_Sheet.getCellRangeByName("S7")
os_range.setDataArray(oq_array)
oq_range=oq_sheet.getCellRangeByName("B62")
oq_array=oq_range.getDataArray()
os_range=os_Sheet.getCellRangeByName("T7")
os_range.setDataArray(oq_array)
oq_range=oq_sheet.getCellRangeByName("B63")
oq_array=oq_range.getDataArray()
os_range=os_Sheet.getCellRangeByName("U7")
os_range.setDataArray(oq_array)
oq_range=oq_sheet.getCellRangeByName("B64")
oq_array=oq_range.getDataArray()
os_range=os_Sheet.getCellRangeByName("V7")
os_range.setDataArray(oq_array)
oq_range=oq_sheet.getCellRangeByName("B65")
oq_array=oq_range.getDataArray()
os_range=os_Sheet.getCellRangeByName("W7")
os_range.setDataArray(oq_array)
oq_range=oq_sheet.getCellRangeByName("B66")
oq_array=oq_range.getDataArray()
os_range=os_Sheet.getCellRangeByName("X7")
os_range.setDataArray(oq_array)
oq_range=oq_sheet.getCellRangeByName("B67")
oq_array=oq_range.getDataArray()
os_range=os_Sheet.getCellRangeByName("Y7")
os_range.setDataArray(oq_array)
oq_range=oq_sheet.getCellRangeByName("B68")
oq_array=oq_range.getDataArray()
os_range=os_Sheet.getCellRangeByName("Z7")
os_range.setDataArray(oq_array)
oq_range=oq_sheet.getCellRangeByName("B69")
oq_array=oq_range.getDataArray()
os_range=os_Sheet.getCellRangeByName("AA7")
os_range.setDataArray(oq_array)
oq_range=oq_sheet.getCellRangeByName("B70")
oq_array=oq_range.getDataArray()
os_range=os_Sheet.getCellRangeByName("AB7")
os_range.setDataArray(oq_array)
oq_range=oq_sheet.getCellRangeByName("B71")
oq_array=oq_range.getDataArray()
os_range=os_Sheet.getCellRangeByName("AC7")
os_range.setDataArray(oq_array)
oq_range=oq_sheet.getCellRangeByName("B72")
oq_array=oq_range.getDataArray()
os_range=os_Sheet.getCellRangeByName("AD7")
os_range.setDataArray(oq_array)
oq_document.close (-1)
End Sub
Viele Grüße
Woatze