Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1276to1280
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Daten in TXT Datei Schreiben/Lesen

Daten in TXT Datei Schreiben/Lesen
lutz
Hallo Excel-Spezialisten, ich habe mal wieder ein Problem bei dem ich leider nicht weiterkomme.
Ich möchte Daten die ich immer in eine Tabelle "Liste" buche, auch in eine externe txt-Datei wegschreiben.
Dazu müssen natürlich immer nur die Neuen Zeilen dazu übertragen werden.
Ich habe einen Code (von Tino?) im Internet gefunden er auch gut funktioniert:
Option Explicit
'*********************************
'------Excel und Textdateien------
'-------Schreiben und Lesen-------
'*********************************

Sub ZeileInTXTschreiben2()
' schreibt 1 Zeile in eine Textdatei
Dim intFF As Integer
Dim strDatei As String
strDatei = "d:\Test.txt"
intFF = FreeFile
Open strDatei For Output As #intFF      ' Öffnet oder erstellt Textdatei zum  _
hineinschreiben
' Anstelle von Output kann auch Append stehen
' (Output überschreibt vorhandene Datei, Append fü _
gt eine neue Zeile hinzu)
Print #intFF, Cells(1, 1)       ' Schreibt den Wert aus A1 in die Datei
Close #intFF                            ' schließt die Textdatei
End Sub

Sub ZeileninTXTschreiben()
' schreibt alle Zellen aus Spalte A(1) in eine Textdatei
Dim intFF As Integer
Dim iZeile As Integer
Dim strDatei As String
Dim strTemp As String
strDatei = "d:\Test.txt"
intFF = FreeFile
iZeile = 1                                 ' Variable für Zeilennummer
Open strDatei For Output As #intFF      ' Öffnet oder erstellt Textdatei zum  _
hineinschreiben
Do Until Cells(iZeile, 1).Value = ""    ' Schleife: Laufe solange, bis Zelle leer ist
strTemp = Cells(iZeile, 1)              ' Zellwert an Zwischenspeicher übergeben
Print #intFF, strTemp                   ' Zwischenspeicher in TXTDatei schreiben
iZeile = iZeile + 1                     ' Zeilenzähler erhöhen
Loop                                    ' zurück zum Schleifenbeginn
Close #intFF                            ' schließt die Textdatei
End Sub

'-------------------------------------------------------------------

Sub ZeileAusTXTlesen2()
' liest 1 Zeile aus einer Textdatei
Dim intFF As Integer
Dim strDatei As String
strDatei = "d:\Test.txt"
intFF = FreeFile
Open strDatei For Input As #intFF       ' Öffnet Textdatei zum Lesen
Line Input #intFF, strDatei             ' Liest die 1. Zeile aus
Range("A1") = strDatei                  ' Der Wert wird aus dem Zwischenspeicher an die  _
Zelle A1 übergeben
Close #intFF                            ' schließt die Textdatei
End Sub


Sub ZeilenAusTXTlesen()
' liest alle Zeilen aus einer Textdatei und schreibt Inhalt in Spalte A
Dim intFF As Integer
Dim iZeile As Integer
Dim strDatei As String
strDatei = "d:\Test.txt"
intFF = FreeFile
iZeile = 1                                 ' Variable für Zeilennummer
Open strDatei For Input As #intFF       ' Öffnet Textdatei zum Lesen
Do While Not EOF(intFF)                 ' Schleife: Laufe bis zur letzten Zeile
Line Input #intFF, strDatei             ' Zeile Lesen und zwischenspeichern
Cells(iZeile, 1) = strDatei             ' Zwischenspeicher an Zelle übergeben
iZeile = iZeile + 1                     ' Zeilennummer erhöhen
Loop                                    ' zurück zum Schleifenbeginn
Close #intFF                            ' schließt die Textdatei
End Sub

Mein Problem: ich möchte nicht nur Spalte A übertragen sondern eigentlich alles aus der Tabelle - am besten wohl getrennt mit Komma oder Semikolon.
Wie müßte man den Code anpassen?
Entweder so das man vorgibt welche Spalten er übertragen soll oder noch besser wenn er das aus dem Inhalt der Tabelle "Liste" ermittelt.
Die Tabelle Liste ist so aufgebaut das immer in Spalte A etwas steht wenn auch in den anderen Spalten Einträge sind - der Code muß also nur Spalte A prüfen.
Vielen Dank für Euro Hilfe ind viele Grüße Lutz

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Daten in TXT Datei Schreiben/Lesen
15.09.2012 16:06:39
fcs
Hallo Lutz,
deine Liste wird ja einen festen Spaltenaufbau haben.
Was für Inhalte sind denn in den Spalten?
Wichtig: Hast du Texte in den Spalten?
Sind diese semikolon-frei, so dass man das das Semicolon als Trennzeichen verwenden kann?
Alternativ müßte man "Tab" oder einen Exoten als Trennzeichen benutzen.
Sind in den Texten Zeilenschaltungen (Zeichen(10) bzw. mit Alt+Enter eingegeben) enthalten? Diese sind Gift, wenn man die Daten wieder in Excel einlesen möchte.
Sind deine Zahlen/Datum konsequent mit einer Ländereinstellung formatiert?
Sollen bei Zahlen/Datum/Zeit die Werte wie angezeigt/formatiert oder inklusive aller Nachkommastellen in die Textdatei geschrieben werden? Bei Zahlen ist es meist sicherer, diese ohne 1000er-Trennzeichen zu schreiben, speziell wenn Re-Import angestrebt ist.
Bei Datum ist ratsam das Format JJJJ-MM-TT zu schreiben, bei Zeiten hh:mm:ss. Dann gibt es beim Wiedereinlesen in Excel keine Problem.
Enthalten deine Daten Angaben wir PLZ oder Telefon-Nr.? Diese sollten als Text und in Anführungszeichen in die Textdatei geschrieben werden, so dass Excel diese beim Re-Import nicht versucht in Zahlen umzuwandeln.
Trennzeichen: Dieses ist abhängig vom verwendeten Zahlenformat.
Dezimalzeichen=Komma, dann Trennzeichen=Semicolon (z,B. Deutschland und andere)
Dezimalzeichen=Punkt, dann Trennzeichen=Komma (z.B. USA und andere)
Am besten, du lädst eine Exceldatei mit ein paar Beispieldaten hoch und eine Textdatei, wie es nach dem Export aussehen soll.
Gruß
Franz

Anzeige
AW: Daten in TXT Datei Schreiben/Lesen
16.09.2012 10:17:42
lutz
Hallo Franz,
es stehen verschiedene Daten drin, deutsche Zahlenangaben, Postleitzahl ist auch dabei...
Umbrüche sollten nicht vorkommen; Tabs auch nicht, ich denke auch keine Semikolons.
https://www.herber.de/bbs/user/81855.xls (Das Blatt sollte nur Liste heißen)
Ich denke als Trennzeichen wäre ein Tab oder ein Exot wie der senkrechte Strich nach oben (Tastatur Alt+kleiner/größer-Taste) am besten.
Die Rücklesefähigkeit ist auch eher optional; wenn man dann noch mal etwas umformatieren müßte bringt mich das nicht um - wichtig ist dass keine Daten mehr verlorengehen können.
Gibt es eigentlich auch nicht editierbare Dateien? In den TXT kann ja auch jeder manuell editieren aber es ist ein Anfang und die Buchungen wären außerhalb von Excel gesichert.
Viele Grüße Lutz

Anzeige
AW: Daten in TXT Datei Schreiben/Lesen
16.09.2012 23:30:32
fcs
Hallo Lutz,
hier 2 Varianten zum Speichern der Daten eines Excel-Tabellenblatts als Textdatei.
Einige Details im Code (z.B. Dateinamen muss du noch ein wenig anpassen)
Variante 1: massgeschneidert für Datenformate in den Spalten und Anzahl Spalten
https://www.herber.de/bbs/user/81859.txt
Variante 2: allgemein ohne Vorgabe der Spaltenzahl (wird vom Makro ermittelt)
https://www.herber.de/bbs/user/81860.txt
Beide Varianten scheinen mit deinen Daten für Export und Import gut zu funktionieren.
Als Trennzeichen wird TAB verwendet.
Daten gegen editoeren schützen:
Der setzt automatisch den einfachen Schreibschutz für die erstellte Textdatei. Der kann natürlich mit einfachen Mitteln auch wieder abgeschaltet werden.
Weitergehende Massnahmen wären die Textdatei auf Laufwerk/Verzeichnis mit beschränktem Zuriff zu speichern oder in eine ZIP-Datei mit Kennwort zu stecken.
Du könntest natürlich genausogut von dem Exceltabellenblatt eine Kopie in einer externen Arbeitsmappe erstellen. Zusätzlich solltest du dir Gedanken machen über die allgemeine Daten-Backup-Speicherung auf einem externen Datenträger - extern = Standort außerhalb des Raumes/Standorts des PC.
Gruß
Franz

Anzeige
Kann man Split umgehen?
17.09.2012 16:31:50
KlausF
Hallo Franz, bin beeindruckt,
habe das hier mit Interesse verfolgt und auch mal getestet. Der Export funktioniert bei mir,
der Import meckert bei der Zeile: arrSplit = Split(strDatei, strSep)
Die Funktion Split gibt es leider bei meiner Excelversion noch nicht (Mac, Version 10)
Lässt sich das irgendwie durch einen Trick umgehen?
Probiert hatte ich mal eine Ersatzfunktion hier aus dem Forum
Function SplitVBA(strText As String, Trenner As String)
'14.02.2012, NoNet - www.excelei.de
Dim a As Long, b As Long, c() As String
Dim d As Long, vorher As Long
d = Len(Trenner)
vorher = 1
ReDim c(1 To Len(strText) \ d + 1)
Do
b = InStr(vorher, strText, Trenner)
If b = 0 Then
c(a + 1) = Mid$(strText, vorher, Len(strText))
If c(a + 1) = "" Then a = a - 1
Exit Do
Else
c(a + 1) = Mid$(strText, vorher, b - vorher)
End If
vorher = b + d
a = a + 1
Loop
ReDim Preserve c(1 To a + 1)
SplitVBA = c
End Function
Meldung war Fehler 9, Index außerhalb des gültigen Bereichs.
Habe dann strText mal als Variant gesetzt aber gleiche Fehlermeldung ...
Gruß
Klaus

Anzeige
AW: Kann man Split umgehen?
17.09.2012 22:33:51
lutz
Hallo Franz,
sorry komme jetzt erst wieder nach Hause...
Vielen Lieben Dank für Deine Mühe - funktioniert echt super!!!
Ich wünsche Dir noch einen schönen Abend/Tag, noch mal vielen Dank und viele Grüße aus Hamburg
Lutz

AW: Kann man Split umgehen?
18.09.2012 06:55:40
fcs
Hallo Klaus,
Split erzeugt ein Array, dessen Felder-Index (LBound) bei 0 beginnt.
Nach folgend die Funktion SplitVBA entsprechend angepasst.
Gruß
Franz
Function SplitVBA(strText As String, Trenner As String)
'14.02.2012, NoNet - www.excelei.de - modifiziert fcs 2012-09-18
Dim a As Long, b As Long, c() As String
Dim d As Long, vorher As Long
d = Len(Trenner)
vorher = 1
a = -1
ReDim c(0 To Len(strText) \ d)
Do
a = a + 1
b = InStr(vorher, strText, Trenner)
If b = 0 Then
c(a) = Mid$(strText, vorher, Len(strText))
Exit Do
Else
c(a) = Mid$(strText, vorher, b - vorher)
End If
vorher = b + d
Loop
ReDim Preserve c(0 To a)
SplitVBA = c
End Function

Anzeige
Perfekt!
18.09.2012 11:30:40
KlausF
Hallo Franz,
bin begeistert, läuft absolut perfekt!
Vielen Dank dafür ...
Gruß aus Hamburg
Klaus

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige