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.
Verzeichnis auslesen
Moderator: Moderatoren
-
- **
- Beiträge: 37
- Registriert: Mo, 13.02.2006 23:55
- Wohnort: Deutschland
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.
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]
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
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]
-
- *
- Beiträge: 16
- Registriert: So, 12.12.2004 19:00
- Wohnort: Schwanau
- Kontaktdaten:
-
- **
- Beiträge: 37
- Registriert: Mo, 13.02.2006 23:55
- Wohnort: Deutschland
Hallo Zappenduster,
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:
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]
Da habe ich jetzt ein Verständnisproblem - Sorry.zappenduster hat geschrieben:... aber wie kann ich Namen und Titel in verschiedenen Zellen anzeigen

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
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]
-
- *
- Beiträge: 16
- Registriert: So, 12.12.2004 19:00
- Wohnort: Schwanau
- Kontaktdaten:
-
- **
- Beiträge: 37
- Registriert: Mo, 13.02.2006 23:55
- Wohnort: Deutschland
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
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