Seite 1 von 1

Alle Dateien eines Ordners in ein Calc-Dokument einbinden

Verfasst: Di 17. Okt 2023, 15:56
von Statistiker
Hallo Gemeinschaft,

als ich noch bei Excel war, gab es da ein Makro, das kopierte bei mir alle Dateien eines Ordners (Verzeichnisses) in eine neue Tabelle, jede Datei in ein Arbeitsblatt. Da ich immer noch sehr viel mit solchen Aufgaben zu tun habe, wäre es schön, wenn man so etwas auch in LibreOffice haben könnte, ich habe leider 0-Kenntnisse von Basic-Programmmierung. Die Calc-Dateien haben unterschiedliche Größe und sind auch unterschiedich aufgebaut und - es sind .odt UND .xls-Dateien.
Vorerst bin ich gespannt auf Eure freundliche Hilfe
Sta

Re: Alle Dateien eines Ordners in ein Calc-Dokument einbinden

Verfasst: Di 17. Okt 2023, 18:22
von karolus
Hallo
Meinst du dieInhalte der Dateien oder die Dateipfade?

Re: Alle Dateien eines Ordners in ein Calc-Dokument einbinden

Verfasst: Di 17. Okt 2023, 18:56
von Statistiker
Ich meine die Inhalte, die Dateipfade lassen sich ja auf Systemebene oder mit dem Kommando-Zeilen "dir/b" auslesen.

Re: Alle Dateien eines Ordners in ein Calc-Dokument einbinden

Verfasst: Di 31. Okt 2023, 15:24
von mikele
Hallo,
prinzipiell sollte das folgende Makro deine Wünsche erfüllen:

Code: Alles auswählen

Sub Main
	'neues Dokument erzeugen, dass alle Tabellen aufnehmen soll
	Dim mArgs()
	oDocument = StarDesktop.loadComponentFromURL ("private:factory/scalc","_blank", 0, mArgs)
	'Verzeichnis auslesen
	sFolder="c:\test" 'welches Verzeichnis soll zusammengefasst werden
	sFolderUrl = ConvertToUrl(sFolder)
	oSimpleFileAccess = createUnoService( "com.sun.star.ucb.SimpleFileAccess" )
	aDateien = oSimpleFileAccess.getFolderContents( sFolderUrl,false )
	'Durchlauf durch alle Dateien
	For i = 0 To UBound( aDateien )
		'wenn .ods oder .xls dann Durchlauf durch alle Tabellen
		if right(aDateien(i),3)="ods" or right(aDateien(i),3)="xls" then 
			'öffnen der Datei, könnte auch im Hintergrund geschehen
			oQuelle=StarDesktop.loadComponentFromURL (adateien(i),"_blank", 0, mArgs)
			for k=0 to oQuelle.Sheets.Count-1
				oDocument.Sheets.importSheet(oQuelle, oQuelle.Sheets(k).name,oDocument.Sheets.Count)
			next
			oQuelle.Close(true)
		end if
	next i      
	'Dateiname und Pfad der neuen Datei festlegen
	aVerzeichnis=split(sFolderUrl,"/")
	aVerzeichnis(ubound(aVerzeichnis))="zusammenfassung.odt"
	sDatei_neu=join(aVerzeichnis,"/")
	'Speichern
	oDocument.storeAsUrl( convertToUrl(sDatei_neu), mArgs)
	'Schließen
	oDocument.Close(true)

End Sub
Ob das Ganze sinnvoll ist, hängt natürlich von den Dateien ab ...

Re: Alle Dateien eines Ordners in ein Calc-Dokument einbinden

Verfasst: Di 31. Okt 2023, 16:10
von karolus
Das hatte ich vor kapp 14Tagen so ähnlich getestet, leider crasht LO nach relativ wenigen importierten Tabellen.

Re: Alle Dateien eines Ordners in ein Calc-Dokument einbinden

Verfasst: Do 9. Nov 2023, 13:14
von Statistiker
Hallo mikele,
mit Verspätung möchte ich antworten. Sorry.
Danke für deine Mühe, aber das Makro tut nix, nur ein neue Datei namens "Zusammenfassung.odt" in dem gewählten Ordner (Verzeichnis) erstellen, die aber offensichtlich das Excel-XLS-Format hat. Ich benutze LO Version 7.6.2.1 - also die letzte.

Re: Alle Dateien eines Ordners in ein Calc-Dokument einbinden

Verfasst: Do 9. Nov 2023, 17:07
von mikele
Hallo,
wenn die Datei in dem Verzeichnis erstellt wird, dann in der Zeile

Code: Alles auswählen

	sFolder="c:\test" 'welches Verzeichnis soll zusammengefasst werden
das Verzeichnis ohne \ am Ende eingeben.
In der namensgebenden Zeile

Code: Alles auswählen

	aVerzeichnis(ubound(aVerzeichnis))="zusammenfassung.odt"
muss es natürlich

Code: Alles auswählen

	aVerzeichnis(ubound(aVerzeichnis))="zusammenfassung.ods"
es ist aber (so oder so) eine Calc-Datei (getestet mit LO 7.3.7).