Auflistung eines Dateiverzeichnisses

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Zahnerer
**
Beiträge: 25
Registriert: Di, 20.02.2007 23:56

Auflistung eines Dateiverzeichnisses

Beitrag von Zahnerer »

Hallo OO-Fans,

eigentlich ist diese Frage wahrscheinlich im Calc-Forum verkehrt, aber ehrlich gesagt, weiß ich nicht recht, wo ich sie stellen soll.

Es wäre super, wenn es möglich wäre, Ordner- und Dateinamen an einem bestimmten Verzeichnisort auszulesen. Weiß irgendwer eine Möglichkeit, dies mit bestenfalls Calc zu bewerkstelligen?

Mit auf Antworten gespannten Grüßen, Zahnerer
Karolus
********
Beiträge: 7438
Registriert: Mo, 02.01.2006 19:48

Beitrag von Karolus »

Hallo Zahnerer
eigentlich ist diese Frage wahrscheinlich im Calc-Forum verkehrt, aber ehrlich gesagt, weiß ich nicht recht, wo ich sie stellen soll.
zb. in OOo-basic und Java
Aber wo du schon mal hier bist, folgendes Makro schreibt den Inhalt eines Verzeichnisses in ein Writer-dokument und erstellt auch gleich Hyperlinks daraus : (gefunden hierviewtopic.php?t=4433&highlight=verzeichniss)

Code: Alles auswählen

Sub ShowFiles
   doc=thiscomponent
   oText = Doc.getText()
   oCursor = oText.createTextCursor()
   oCursor.gotoEnd( False )
   Dim NextFile As String
   Dim AllFiles As String
      AllFiles = ""
      NextFile = Dir("/dein/verzeichniss/", 0)
     'NextFile = Dir("C:\dein\verzeichniss\",0) 'Windows-Syntax
   While NextFile <> ""
     oCursor.gotoEnd(false)
     oText.insertString( oCursor,Nextfile, False )
     oText.insertControlCharacter( oCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False )
     oCursor.gotoPreviousParagraph(false) 
     oCursor.gotoStartofParagraph(true)
     oCursor.gotoEndofParagraph(true) 
     oCursor.hyperlinkurl="file:///dein/verzeichniss/"&Nextfile
    'oCursor.hyperlinkurl="file:///C:\dein\verzeichniss\"&Nextfile 'Windows-syntax ?
     NextFile = Dir
   Wend
End Sub 
Falls Windows ? bitte die beiden Pfad-zeilen umkommentieren.

Gruß Karo
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Zahnerer,

na, da liefere ich dir doch gleich noch einen Code dazu:

Code: Alles auswählen

REM listet alle Dateien eines Verezeichnisses in einem 
REM Calc-Sheet auf

Sub Dateien_auflisten
	dim sPfad as string
	dim oSheet as Object
	dim iSp as integer, iZe as Long
	
	oSheet = thisComponent.sheets.getByName("Tabelle1")
	iSp = 0 : iZe = 4  'Startzele der Auflistung A5
	sPfad = ConvertToUrL("D:\Daten\welcher\Pfad\auch\immer\")
	
	nextFile = dir(sPfad, 0)  'die erste Datei
	Do while nextFile <> ""
		oSheet.getCellByPosition(iSp, iZe).string = nextFile
		iZe = iZe + 1
		nextFile = Dir
	loop
	
End Sub
Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Zahnerer
**
Beiträge: 25
Registriert: Di, 20.02.2007 23:56

Beitrag von Zahnerer »

Hallo Toxitom und Karolus,

erst mal vielen Dank für die schnellen Antworten. Mein Problem ist nur, dass ich mich bei Makros noch gar nicht auskenne. Ich würd's ja schon gerne wissen und vielleicht ist dies eine Gelegenheit zum Einstieg...

Könnt Ihr mir ein paar Tips für Greenhorns geben? Ich denke, ich brauch 'nen Button und ein Eingabefeld um die Variable (Dir) einzugeben. Wie mach ich das als absoluter Anfänger in Basic?

Kann man auch die Verzeichnisse (und Dateien) innerhalb eines Verzeichnisses auslesen lassen?

so ähnlich zum Beispiel (als Tabelle natürlich):
  • Ordner 2007
    • Ordner Januar
      • Ordner 15ter
        • Datei A
        • Datei B
        • Datei C
      • Ordner 23ter
        • Datei D
      • Ordner 28ter
        • Datei E
        • Datei F
      • Datei G
    • Ordner Februar
      • Ordner 1ter
        • Datei H
        • Datei I
      • Ordner 5ter
        • Datei J
???

Dank für die Hilfe und Antworten, Zahnerer
Karolus
********
Beiträge: 7438
Registriert: Mo, 02.01.2006 19:48

Beitrag von Karolus »

Hallo Zahnerer

Kopier mal folgendes nach:
-->Extras-->Makros-->Makros verwalten-->OOo-basic
'meine Makros'--Standard--"neues Modul"[1]
[1]erstellen über Schaltfläche 'neu

Code: Alles auswählen

REM  *****  BASIC  *****
rem *Überträgt die Verzeichnisstruktur ab einem einzugebenden
rem *Oberverzeichniss in ein Tabellendokument 
rem * Zahnerer 02-03-07 --Karo--
Sub Verzeichnisstruktur
   dim sPfad as string
   dim oSheet as Object
   dim iSp as integer, iZe as Long
   dim neupfad as string
   dim upfad as string
   
   odoc = thisComponent
   oSheet = thisComponent.sheets(0)
   iSp = 0 : iZe = 0  'Startzelle der Auflistung A1
   sPfad = inputbox ("Bitte gib einen Verzeichnisspfad ein: ","Lieber Benutzer")
   sPfad = ConvertToUrl(sPfad)
   dv = 16 'für Verzeichnisse
   nextFile = dir(sPfad, dv)  'das erste Verzeichniss
   Do while nextFile <> "" 
   if nextfile = "." or nextfile = ".." or left(nextfile,1) = "." then
   		nextfile = Dir
   		else
   		'für die erste Verzeichnissebene werden Tabellenblätter
   		'mit den Verzeichnissnamen erstellt
   		oDoc.Sheets.CopyByName("Tabelle1",nextfile ,tindex + 1)
   		tindex = tindex + 1
      	nextFile = Dir
      end if
   loop

   dv = 0  'für Dateien
   nextFile = dir(sPfad, dv)  'die erste Datei
   Do while nextFile <> "" 
   		if nextfile = "." or nextfile = ".." or left(nextfile,1) ="."  then
   			nextfile = Dir
   		else
'Die Dateien der obersten Verzeichnissebene werden in Tabelle1 gelistet
			oSheet.getCellByPosition(Sindex, iZe).string = nextFile
      		iZe = iZe + 1
      		nextFile = Dir
      	end if
   loop
   
tabzahl = odoc.sheets.count
for t = 1 to tabzahl -1
osheet = odoc.sheets(t)
oSp = 1 : oZe = 0
tabname = odoc.sheets(t).name
neupfad = spfad & tabname & "/"
dv = 16  'Verzeichnisse
nextFile = dir(neuPfad , dv)  'das erste Verzeichniss
   Do while nextFile <> "" 
   		if nextfile = "." or nextfile = ".." or left(nextfile,1) ="."  then
   			nextfile = Dir
   		else
'Die 2. Verzeichnissebene wird in Kopfzeile der einzelnen Tabellenblätter geschrieben
			oSheet.getCellByPosition(oSp, oZe).string = nextFile
			oSp = oSp + 1
      		nextFile = Dir
      end if
      scount = oSp
   loop
dv = 0 'Dateien
oSp = 0 : oZe = 0
nextFile = dir(neuPfad , dv)  'die erste Datei
   Do while nextFile <> "" 
   		if nextfile = "." or nextfile = ".." or left(nextfile,1) ="."  then
   			nextfile = Dir
   		else
'Die Dateien der 1. Verzeichnissebene werden in Spalte A der einzelnen Tabellenblätter geschrieben
			oSheet.getCellByPosition(oSp, oZe).string = nextFile
			oZe = oZe + 1
      		nextFile = Dir
      end if
   loop
	for sp = 1 to scount - 1
		oZe = 1
		kopf = oSheet.getCellByPosition(Sp, 0).string
		upfad = neupfad & kopf & "/"
		dv = 0 'Dateien
		nextfile = dir(upfad ,dv)
   		Do while nextFile <> "" 
   			if nextfile = "." or nextfile = ".." or left(nextfile,1) ="."  then
   				nextfile = Dir
   			else
'die Dateien der zweiten Ebene werden in die zugehörigen Spalten geschrieben
   				oSheet.getCellByPosition(Sp, oZe).string = nextFile
				oZe = oZe + 1
				nextFile = Dir
			end if
		loop
	next sp
next t
end sub

Starte das Makro aus einem neuem Tabellendokument.

Es bildet die Verzeichnisstruktur nicht so ab wie von dir gewünscht, ist aber vermtl. "allgemeintauglicher" - (und so wars auch leichter zu schreiben :D )

Gruß karo
Zahnerer
**
Beiträge: 25
Registriert: Di, 20.02.2007 23:56

Beitrag von Zahnerer »

Danke Karolus,

ich werde das die nächsten Tage mal probieren. Ich melde mich dann wieder.

Zahnerer
Alex Livingstone
Beiträge: 1
Registriert: Mo, 28.12.2020 15:42

Re: Auflistung eines Dateiverzeichnisses

Beitrag von Alex Livingstone »

@all: HI

Das Script/Makro funktioniert.
Danke @Karolus

Ich arbeite gerade an meinem ersten Computerspiel und Ich brauche eine "Besitzrecht-Rechnung". Dabei soll das Programm oder Makro einen Ordner einlesen und zu jeder Datei feststellen wieviel % es insgesamt sind.
Dafuer muss Ich dsas Script bearbeiten oder anpassen und Ich habe absolut noch keine Ahnung wie das funktioniert, vllt. koennt Ihr mir helfen. Das fertige Script gibt es dann am Ende.
Ueber einen guten Link dass mir alles erklaert wuerde Ich mich sehr freuen.
Antworten