Seite 1 von 1

Dateinamen in Textdatei schreiben ...

Verfasst: So, 03.01.2010 10:32
von AndiMoor
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

Re: Dateinamen in Textdatei schreiben ...

Verfasst: Mo, 04.01.2010 16:06
von DPunch
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:

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
Ansonsten wäre eine klarere Formulierung vielleicht hilfreich :wink:

Re: Dateinamen in Textdatei schreiben ...

Verfasst: Mo, 04.01.2010 19:26
von AndiMoor
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 ...

Re: Dateinamen in Textdatei schreiben ...

Verfasst: Mo, 04.01.2010 21:18
von DPunch
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:

Code: Alles auswählen

If NOT Globalscope.BasicLibraries.IsLibraryLoaded("Tools") Then
	Globalscope.BasicLibraries.LoadLibrary("Tools")
End If