Seite 1 von 1

Verzeichnis auslesen

Verfasst: Mi, 27.09.2006 09:05
von FloWrian
Hallo,

ich möchte gerne, dass calc ein verzeichnis auf meiner festplatte ausliest
und dann die darin enthaltenen dateinamen automatisch in eine tabelle einfügt.
habe leider mit der Suchfunktion nichts passendes gefunden. ist das überhaupt möglich ?

vielen dank.

Verfasst: Fr, 29.09.2006 20:34
von Raindancer
Hallo FloWrian,

ich versuche seit einiger Zeit von MSO auf OOo umzusteigen. Excel und Calc sind nicht unbedingt meine Hauptinteressen (eher Writer und Basic). Ich bin also bestenfalls Anfänger.
Da ein Kollege von mir vor längerer Zeit genau das Gleiche bei Excel wollte, habe ich sein MSO-Makro (soweit ich noch Notizen davon hatte) genommen und habe es versucht in OOo-Basic umzusetzen.
Vielleicht kann Dir das folgende Makro ein wenig helfen.

Code: Alles auswählen

sub main
Dim Desktop as object
Dim Mappe as object
Dim Tabelle as object

Dim sNamen As String
Dim i as long
Dim dummy()

Desktop = CreateUnoService ("com.sun.star.frame.Desktop")
Mappe = Desktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, dummy())
Tabelle = Mappe.getSheets().getbyIndex(0)
i = 1

sNamen = Dir("G:/Patch/" , 0)
Do While sNamen <> ""

	Tabelle.getCellbyPosition(1,i).string = sNamen
	i = i + 1
	sNamen = Dir

Loop

End Sub

Noch ein kleiner Hinweis zum Index:
Bei Calc hat die oberste, linke Zelle den Index (o/o).
Da ich den Zähler i mit dem Wert 1 initialisiert habe (i = 1) und auch den Spaltenindex auf 1 gesetzt habe (Tabelle.getCellbyPosition(1,i). ...) werden die Daten in Spalte "B" ab Zeile "2" ausgegeben.

Bei der Zeile " ... CreateUnoService ("com.sun.star.frame.Desktop")"
solltest Du unbedingt die Schreibweise von Desktop beachten!

Alles Klar?

Gruß
Ralf

[edit]
Haste sicher gesehen, aber aus Gründen der Vollständigkeit,
in der Zeile sNamen = Dir("G:/Patch/" , 0) trägst Du natürlich Dein Verzeichnis ein!
[/edit]

Verfasst: So, 01.10.2006 09:52
von zappenduster
Hallo Raindancer,

klappt prima, aber wie kann ich Namen und Titel in verschiedenen Zellen anzeigen

Verfasst: So, 01.10.2006 11:13
von Raindancer
Hallo Zappenduster,
zappenduster hat geschrieben:... aber wie kann ich Namen und Titel in verschiedenen Zellen anzeigen
Da habe ich jetzt ein Verständnisproblem - Sorry. :?
Das kleine Makro liest die Dateinamen eines gewählten Verzeichnisses aus und schreibt diese untereinander in die Zellen einer Spalte (hier Spalte B).

Was aber meinst Du mit Titel? Möchtest Du den Verz.-Namen (Pfad) noch in der Tabelle aufnehmen?
Da die Dateinamen ab B2 eingetragen werden, könnte man A1 (Index 0,0) nutzen.
Tabelle.getCellbyPosition(0.0).string = Pfad

Mein Sohn, der gerade über meine Schulter schaute, meinte das Makro wär ja etwas primitiv, da jedesmal der Pfad im Makro eingetragen werden muss und nicht per Dialog gewählt werden kann. Das wär ja "EDV zu Fuß". OK, ich hatte dieser Tage gerade in einem anderen Thread gelernt wie das geht und habe nun das obige Makro um diese Auswahl ein wenig erweitert:

Code: Alles auswählen

sub main
Dim Desktop as object
Dim Mappe as object
Dim Tabelle as object
Dim oFolderPicker as object
Dim sNamen As String
Dim sPath as String
Dim i as long
Dim dummy()

oFolderPicker = createUnoService("com.sun.star.ui.dialogs.FolderPicker")
oFolderPicker.execute
sPath = ConvertFromUrl(oFolderPicker.directory & "/")
' msgbox sPath

Desktop = CreateUnoService ("com.sun.star.frame.Desktop")
Mappe = Desktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, dummy())
Tabelle = Mappe.getSheets().getbyIndex(0)

Tabelle.getCellbyPosition(0,0).string = sPath
i = 1
sNamen = Dir(sPath , 0)
Do While sNamen <> ""
   Tabelle.getCellbyPosition(1,i).string = sNamen
   i = i + 1
   sNamen = Dir
Loop

End Sub 
Gruß
Ralf

[edit]
Ach ja, oder meinst Du eine Trennung des Dateinamens und der Dateierweiterung - z.B. Bild1.jpg in Bild1 und jpg in versch. Spalten der Tabelle?
[/edit]

Verfasst: So, 01.10.2006 17:49
von zappenduster
Als Inhaltsverzeichnis für selbstzubrennende CD.
Spalte B Interpret
Spalte C Titel
so sieht es jetzt aus:
Al Foul - 10 Bucks.mp3

Verfasst: Mo, 02.10.2006 21:41
von Raindancer
Aaahh jaa, an Musikdateien hab ich gerade nicht gedacht (hab keine MP3).

Jo, das geht mit den String-Funktionen (Instr, Len, Mid und/oder Split). Gibt es sicher mehrere Möglichkeiten zu coden.

Die folgenden Codezeilen gehen von der Voraussetzung aus, dass die Dateienamen immer nach Deinem Muster aufgebaut sind: "Al Foul - 10 Bucks.mp3"
Also immer Interpret und Titel in der vorgegebenen Reihenfolge und durch Bindestrich getrennt, Dateiendung '.mp3'.

Dann legen wir mal los.
Die Variable 'sNamen' enthält ja schon den Dateinamen und den zerlegen wir wie folgt. (Erforderlich ist noch ein Array 'Dim TeilStrings() as string' für Split)

Als erstes entfernen wir '.mp3'. Das sind die letzten 4 Zeichen, also mit Left: 'sName = Left(sNamen, 1, (Len(sNamen) - 4))'

sName enthält nun nur noch 'Al Foul - 10 Bucks' und das zerlegen wir mit Split. Split schreibt die Teile des Strings in ein Array, Trennzeichen ist hier der Bindestrich.
TeilStrings() = Split(sNamen, "-")
TeilStrings(0) und TeilStrings(1) enthalten nun jeweils Interpret und Titel

Fertig. Ich habe das mal ins Makro eingefügt (die neuen Zeilen in Fettdruck):

sub main
Dim Desktop as object
Dim Mappe as object
Dim Tabelle as object
Dim oFolderPicker as object
Dim TeilStrings() as string
Dim sNamen As String
Dim sPath as String
Dim i as long
Dim dummy()

oFolderPicker = createUnoService("com.sun.star.ui.dialogs.FolderPicker")
oFolderPicker.execute
sPath = ConvertFromUrl(oFolderPicker.directory & "/")
' msgbox sPath

Desktop = CreateUnoService ("com.sun.star.frame.Desktop")
Mappe = Desktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, dummy())
Tabelle = Mappe.getSheets().getbyIndex(0)

Tabelle.getCellbyPosition(0,0).string = sPath
i = 1
sNamen = Dir(sPath , 0)
Do While sNamen <> ""
sNamen = Left(sNamen, (Len(sNamen) - 4))
TeilStrings() = Split(sNamen, "-")
Tabelle.getCellbyPosition(1,i).string = Trim(TeilStrings(0))
Tabelle.getCellbyPosition(2,i).string = Trim(TeilStrings(1))
i = i + 1
sNamen = Dir
Loop

End Sub

Deutlicher Hinweis:
Dieses Makro läuft jetzt nicht mehr für normale Verzeichnisse!
Es läuft nur noch, wenn ALLE Dateinamen im Verzeichnis Deinem Muster "Al Foul - 10 Bucks.mp3" entsprechen! Ein einziger anderer Dateiname und es hagelt Fehlermeldungen.
Genaugenommen müsste man noch eine Prüfung des Dateinamens "sNamen' einbauen.

Gruß
Ralf