Seite 1 von 2

Dir-Funktion - die Namen der Dateien eines Ordners auflisten

Verfasst: Sa 25. Apr 2026, 17:53
von Proma
Hallo liebe Experten,

mithilfe der Dir()-Funktion wollte die Namen aller PDF-Dateien eines Ordners auflisten. Schien mir eine einfache Angelegenheit, bis ich den ersten Test durchführte. Mein Makro fand die *.pdf-Dateien nicht, weil ich nach *.PDF-Dateien gesucht hatte.
Das habe ich behoben, indem ich nun nach allen Dateien (*.*) in diesem Ordner suche und danach mittels Like-Operator vergleiche, ob die gefundene Datei meinem Suchmuster entspricht. Funktioniert.
Nun meine Frage: Gibt es hierfür eine elegantere Lösung als meinen Notbehelf?
Ich arbeite mit der LO-Version 25.8.5.2 unter Windows 11.

Vielen Dank schon vorab für Eure Unterstützung und liebe Grüße
vom Martin

Re: Dir-Funktion - die Namen der Dateien eines Ordners auflisten

Verfasst: Sa 25. Apr 2026, 20:05
von Proma
Hallo nochmal,
habe bei meiner Anfrage vergessen, den Code beizufügen, was ich hiermit nachhole.
Irgendwo hatte ich gelesen, dass die Dir()-Funktion bei Windows Dateien "normalerweise" nicht zwischen Groß-und Kleinschreibung unterscheidet. Aber da geht es mir wohl so ähnlich wie Heinz Erhardt, der einnmal gesagt hat: "Alles im Leben geht natürlich zu. Nur meine Hose, die geht natürlich nicht zu."
Ja, und nun interessieren mich natürlich die beiden Fragen:
- Woran kann es liegen, dass mit Dir(strPfd & "\*.PDF", 0) "Datei.PDF" gefunden wird, jedoch "Datei.pdf" nicht?
- Gibt es eine elegantere Lösung für dieses Problem als meine Krücke?
Vielen Dank vorab für Tipps und Hinweise zu einer guten Lösung und liebe Grüße
vom Martin

Code: Alles auswählen

Sub Demo_pListFilenames()
  MsgBox pListFilenames("D:\00_Allgemein","*.*",Chr(10))
End Sub

Function pListFilenames(ByVal strPfd As String, _
               Optional ByVal strMst As String, _
               Optional ByVal strTrn As String, _
               Optional ByVal bolPfd As Boolean) As String

' Gibt die Dateinamen des Verzeichnisses strPfd
' mit bzw. ohne Pfadangabe zurück. 

' PARAMETER:
' strPfd             Der zu durchsuchende Ordner mit vollständiger Pfadangabe
' strMst  [Optional] Suchmuster; Standard ist *.*
' strTrn  [Optional] Trennzeichen zwishen den zurückgegebenen (Pfad- und) Dateinamen; Standard ist das Komma (",")          
' bolPfd  [Optional] Gibt an, ob gefundene Dateinamen MIT oder OHNE Pfadamgabe zurückgegeben werden; Standard ist OHNE


  Dim m As String, c As String, s As String                          
  

' STANDARDWERTE FÜR OPTIONALE PARAMETER
  If IsMissing(strMst) Then strMst = "*.*"                      'Standard-Suchmuster:   Alle Dateien
  If IsMissing(strTrn) Then strTrn = ","                        'Standard-Trennzeichen: Komma (",")
  If IsMissing(bolPfd) Then bolPfd = False                      'Standard-Einstellung:  Dateien OHNE Pfad listen


' WEGWEISER ZUR FEHLER-ROUTINE
  On Error GoTo Err_pListFilenames
  

' MIT SUCHMUSTER ÜBEREINSTIMMENDE DATEINAMEN LISTEN
  If Right(strPfd, 1) <> "\" Then strPfd = strPfd & "\"         'Sicherstellen, dass Pfad mit Backslash ("\") endet
  c = Dir(strPfd & "*.*", 0)                                    'Erste Datei im Ordner suchen
  Do While c <> ""                                              'Schleife solange eine Datei gefunden wurde
    If c Like strMst Then                                       '  Wenn gefundene Datei dem Suchmuster entspricht
      If bolPfd = True Then s = s & strPfd                      '    Ggf. gefundener Datei die Pfadangabe voranstellen
      s = s & c & strTrn                                        '    Gefundene Datei plus Trennzeichen anfügen
    End If                                                      '  Ende Wenn
    c = Dir()                                                   '  Nächste Datei im Ordner suchen
  Loop                                                          'Ende Schleife
  If s <> "" Then s = Left(s, Len(s) - Len(strTrn))             'Ggf. Letztes Trennzeichen entfernen
  pListFilenames = s                                            'Rückgabewert setzen


Exit_pListFilenames:                                          'SM: Ausgang
  Exit Function                                                 'Diese Prozedur verlassen

Err_pListFilenames:                                           'SM: Fehler
  m = "Fehler-Nr.: " & Err & " in Zeile " & Erl & Chr(10)       'Fehlermeldung erstellen
  MsgBox m & Error$: Resume Exit_pListFilenames                 'Meldung ergänzen & zeigen, weiter bei SM: Ausgang

End Function

Re: Dir-Funktion - die Namen der Dateien eines Ordners auflisten

Verfasst: So 26. Apr 2026, 12:38
von karolus
Hallo
- Woran kann es liegen, dass mit Dir(strPfd & "\*.PDF", 0) "Datei.PDF" gefunden wird, jedoch "Datei.pdf" nicht?
seltsame Frage… offensichtlich ist es hier nicht egal ob etwas GROSS oder klein geschrieben wird.

Ansonsten:

Code: Alles auswählen

from pathlib import Path
from msgbox import MsgBox

def messagebox( message, deko=None, title="Read_ME" ):
    msg = MsgBox( XSCRIPTCONTEXT.ctx )
    msg.addButton( 'ok' )
    msg.addButton( 'cancel' )
    msg.show( message, deko, title)

    
def main():
    """
    siehe auch https://docs.python.org/3.15/library/pathlib.html#pathlib.Path.glob
    python benutzt normale / slashes auch auf windows als Pfadtrenner
    """
    rootpath = Path.home() / "Downloads" 
    pdfs = '\n'.join(f"{p.name}" for p in rootpath.glob("**/*.pdf")  )
    messagebox(pdfs, title="gugge da die pdfs")

Re: Dir-Funktion - die Namen der Dateien eines Ordners auflisten

Verfasst: Mo 27. Apr 2026, 13:38
von Proma
Hallo Karolus,

vielen Dank für Deine Unterstützung! Verstehe ich das richtig, dass eine bessere Lösung als meine derzeitige Krücke nur mittels Python zu erreichen ist? Aus persönlichen Gründen bin ich nicht mehr gewillt, mich in Python einzuarbeiten. Nix für ungut und danke nochmal für Deine Mühen!

Liebe Grüße
vom Martin

Re: Dir-Funktion - die Namen der Dateien eines Ordners auflisten

Verfasst: Mo 27. Apr 2026, 19:16
von karolus
Hallo
Vielleicht dann etwas weniger verbastelt mit Ausgabe in ein Tabellenblatt:

Code: Alles auswählen

sub main()	
	sfa = createUnoService("com.sun.star.ucb.SimpleFileAccess")
	files = sfa.getFolderContents("file:///D:/00_Allgemein/", True)
	dim out(ubound(files))	
	for each file in files
		if right(file, 4) = ".pdf" then
			out(i) = array(file)
			i = i+1
		end if
	next	
	redim preserve out(i-1)	
	thisComponent.Sheets(0).getCellRangeByName("A1:A" & i).DataArray = out     
end sub

Re: Dir-Funktion - die Namen der Dateien eines Ordners auflisten

Verfasst: Mo 27. Apr 2026, 19:31
von mikele
Hallo,
@karolus: vielleicht hilft noch ein LCASE um die verschiedenen Groß-/Kleinschreibungen abzufangen.

Code: Alles auswählen

if lcase(right(file, 4)) = ".pdf" then

Re: Dir-Funktion - die Namen der Dateien eines Ordners auflisten

Verfasst: Mo 27. Apr 2026, 20:44
von karolus
Ja da war ja noch was mit GROSS und klein, mit python wärs dann mittels "com.sun.star.ucb.SimpleFileAccess"-service auch nur ein Einzeiler:

Code: Alles auswählen

pdfs = list(filter(lambda file: file.lower().endswith('.pdf'),
                   sfa.getFolderContents("file:///D:/00Allgemein",False)))

Re: Dir-Funktion - die Namen der Dateien eines Ordners auflisten

Verfasst: Mo 27. Apr 2026, 21:12
von mikele
8-)

Re: Dir-Funktion - die Namen der Dateien eines Ordners auflisten

Verfasst: Di 28. Apr 2026, 11:22
von Proma
Hallo Karolus,
hallo mikele,

vielen Dank für Eure Unterstützung!
Das ist ein interessanter Ansatz, der mir wieder neue Welten eröffnet! :D
Im Prinzip funktioniert der Code von Karolus einwandfrei, nur die letzten beiden Zeilen bringen mir Fehlermeldungen. Ich bin der Sache jetzt nicht weiter nachgegangen, da das Wesentliche klappt; es werden sowohl mit ".pdf" als auch mit "PD'F" die jeweils korrekte Anzahl von Treffern erzielt, und das war ja auch mein Anliegen.

Ich kann es mir jetzt aber nicht verkneifen zu bemerken, dass meine - zugegeben etwas plumpe Methode (alle Dateien einzulesen und sie per Like-Operator mit dem Suchmuster zu vergleichen) - sooo schlecht gar nicht ist, oder sehe ich das falsch?

Fazit: Ich habe wieder etwas neues dazugelernt und dafür danke ich Euch recht herzlich!
Liebe Grüße
vom Martin

Re: Dir-Funktion - die Namen der Dateien eines Ordners auflisten

Verfasst: Di 28. Apr 2026, 12:47
von karolus
Proma hat geschrieben:
Di 28. Apr 2026, 11:22

Im Prinzip funktioniert der Code von Karolus einwandfrei, nur die letzten beiden Zeilen bringen mir Fehlermeldungen.
Du solltest das auch ausführen während du ein neues Calc-dokument geöffnet und im Fokus hast! Du musst halt auch lesen was ich geschrieben habe:
Karolus hat geschrieben:…mit Ausgabe in ein Tabellenblatt: