🍀 Das LibreOffice Forum braucht HEUTE Ihre Hilfe! 🍀
❤️ Spenden Sie jetzt und sichern Sie die Zukunft unseres LibreOffice-Forums ❤️
Ihre Spende hilft, die Community offen, werbefrei (bei Registrierung) und lebendig zu halten. Vielen lieben Dank!

🙏 DANKE >> << DANKE 🙏

>> Das LibreOffice-Forum lebt von Ihnen – und von vielen Experten, die freiwillig und kostenlos ihr Wissen teilen.<<
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

Dir-Funktion - die Namen der Dateien eines Ordners auflisten

Alles zur Programmierung im LibreOffice.
Proma
Beiträge: 51
Registriert: Di 24. Sep 2024, 16:53

Dir-Funktion - die Namen der Dateien eines Ordners auflisten

Beitrag von Proma » Sa 25. Apr 2026, 17:53

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

Proma
Beiträge: 51
Registriert: Di 24. Sep 2024, 16:53

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

Beitrag von Proma » Sa 25. Apr 2026, 20:05

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

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2710
Registriert: Fr 10. Dez 2010, 10:01

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

Beitrag von karolus » So 26. Apr 2026, 12:38

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")
LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)

Proma
Beiträge: 51
Registriert: Di 24. Sep 2024, 16:53

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

Beitrag von Proma » Mo 27. Apr 2026, 13:38

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

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2710
Registriert: Fr 10. Dez 2010, 10:01

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

Beitrag von karolus » Mo 27. Apr 2026, 19:16

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
LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)

mikele
* LO-Experte *
Beiträge: 2046
Registriert: Mo 1. Aug 2011, 20:51

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

Beitrag von mikele » Mo 27. Apr 2026, 19:31

Hallo,
@karolus: vielleicht hilft noch ein LCASE um die verschiedenen Groß-/Kleinschreibungen abzufangen.

Code: Alles auswählen

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

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2710
Registriert: Fr 10. Dez 2010, 10:01

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

Beitrag von karolus » Mo 27. Apr 2026, 20:44

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)))
LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)

mikele
* LO-Experte *
Beiträge: 2046
Registriert: Mo 1. Aug 2011, 20:51

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

Beitrag von mikele » Mo 27. Apr 2026, 21:12

8-)
Gruß,
mikele

Proma
Beiträge: 51
Registriert: Di 24. Sep 2024, 16:53

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

Beitrag von Proma » Di 28. Apr 2026, 11:22

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

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2710
Registriert: Fr 10. Dez 2010, 10:01

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

Beitrag von karolus » Di 28. Apr 2026, 12:47

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:
LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)


An alle, die das LibreOffice-Forum gern nutzen:
Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das laufende.
Einfach per Kreditkarte oder PayPal. Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.



❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten