Hallo,
ich suche nache eine Lösung für folgendes Problem:
Ich habe in einem Ordner mehrer Dateien, deren Namen (z.B. aaaaa.bbb, bbbbb.bbb) in eine bestehende Tabelle eingefügt werden sollen.
Allerdings sollen die Dateinamen nacheinander in diese Datei eingefügt werden, also 1. Dateinamen, dann abspeichern (aaaaa.txt), dann 2. Dateinamen, abspeichern (bbbbb.txt) - jeweils soll der Dateiname in der gleichen Zelle in der gleichen Tabelle eingefügt/ersetzt werden.
Resultat sollte sein: Gleiche Anzahl an TXT-Dateien, mit dem Namen der Datei, die zuvor in eine Zelle eingefügt worden ist.
Das ganze sollte automatisiert ablaufen. Die TXT-Dateien sollen in einem anderen Ordner gespeichert werden, der jedoch fest im Code stehen kann, da sich dieser nicht ändert - also muss keine Abfrage stattfinden. Genauso ist die Zelle, in der der Wert geschrieben wird immer gleich (z. B. B25) ...
Danke im voraus ...
Andi
Dateinamen in Textdatei schreiben ...
Moderator: Moderatoren
Re: Dateinamen in Textdatei schreiben ...
Du hast eine bestehende Tabelle in einer Datei - nennen wir sie einfach mal Tabellendatei - ok
Ein Dateiname (bzw. insgesamt mehrere) soll ausgelesen werden - ok
Der Dateiname soll z.B. in Zelle B25 der Tabellendatei geschrieben werden - ok
Von da ab verstehe ich leider nicht mehr so wirklich, was Du meinst.
Soll die Tabellendatei, in die z.B. gerade in B25 "aaaaa.bbb" geschrieben wurde, jetzt als "aaaaa.txt" gespeichert werden?
Und das ganze einfach mit allen Datein in einem bestimmten Ordner?
Sollte dem so sein, würde das ungefähr so aussehen:
Ansonsten wäre eine klarere Formulierung vielleicht hilfreich 
Ein Dateiname (bzw. insgesamt mehrere) soll ausgelesen werden - ok
Der Dateiname soll z.B. in Zelle B25 der Tabellendatei geschrieben werden - ok
Von da ab verstehe ich leider nicht mehr so wirklich, was Du meinst.
Soll die Tabellendatei, in die z.B. gerade in B25 "aaaaa.bbb" geschrieben wurde, jetzt als "aaaaa.txt" gespeichert werden?
Und das ganze einfach mit allen Datein in einem bestimmten Ordner?
Sollte dem so sein, würde das ungefähr so aussehen:
Code: Alles auswählen
Dim Dummy()
oDoc = thiscomponent
oSheet = oDoc.Sheets(0)
oCell = oSheet.getCellByPosition(1,24) 'Zelle B25
sSourcePath = "C:\MeineDateien\" 'Ordner, in dem die Dateien liegen
sTargetPath = "C:\Speicherpfad\" 'Ordner, in dem die Txt-Dateien gespeichert werden sollen
SourceUrl = ConvertToUrl(sSourcePath)
oFileAccess = createUnoService("com.sun.star.ucb.SimpleFileAccess")
aFiles = oFileAccess.getFolderContents(SourceUrl,False) 'Alle Dateien im Ordner
For i = LBound(aFiles) To UBound(aFiles)
sFileName = FileNameoutofPath(aFiles(i)) 'Dateinamen aus komplettem Pfad extrahieren
oCell.String = sFileName '...und in Zelle B25 schreiben
sFileName = GetFileNameWithoutExtension(sFileName) 'Die Dateiendung abschneiden
sFileName = sFileName & ".txt" '...und ein ".txt" dranhängen
TargetUrl = ConvertToUrl(sTargetPath & sFileName)
oDoc.storeToUrl(TargetUrl,Dummy) 'Speichern
Next i

Re: Dateinamen in Textdatei schreiben ...
Hast es richtig verstanden, allerdings bringt es eine Fehlemeldung:
Basic-Laufzeitfehler
Sub- oder Function-Prozedur nicht definiert
in Zeile: sFileName = FileNameoutofPath(aFiles(i))
Danke im voraus ...
Basic-Laufzeitfehler
Sub- oder Function-Prozedur nicht definiert
in Zeile: sFileName = FileNameoutofPath(aFiles(i))
Danke im voraus ...
Andi
Re: Dateinamen in Textdatei schreiben ...
FileNameoutofPath (wie auch z.B. GetFileNameWithoutExtension) ist eine Sub aus der in OOo integrierten "Tools" Bibliothek.
Solange diese nicht geladen worden ist (entweder manuell, indem man diese vor dem erstmaligen Benutzen unter Makros verwalten -> OpenOffice.org Makros und dann Tools aufklappt, oder eben per Makro z.B. beim Programmstart), sind die darin enthaltenen Prozeduren nicht "bekannt".
Stell einfach an den Anfang Deiner Sub den Code hier:
Solange diese nicht geladen worden ist (entweder manuell, indem man diese vor dem erstmaligen Benutzen unter Makros verwalten -> OpenOffice.org Makros und dann Tools aufklappt, oder eben per Makro z.B. beim Programmstart), sind die darin enthaltenen Prozeduren nicht "bekannt".
Stell einfach an den Anfang Deiner Sub den Code hier:
Code: Alles auswählen
If NOT Globalscope.BasicLibraries.IsLibraryLoaded("Tools") Then
Globalscope.BasicLibraries.LoadLibrary("Tools")
End If