[EXCEL] Textdatei mit Excel erzeugen

2cool

Mitglied
Hallo zusammen
Ich möchte gerne mit Excel eine Textdatei erzeugen bei welcher die Daten nicht getrennt sind. Der Datensatz muss aber mit CRLF beendet sein.

Dank 2cool
 
Zuletzt bearbeitet:

mac7

Stammgast
Hallo 2cool

Speichere deine Excel-Datei im csv-Format (Trennzeichen getrennt *.csv) ab und öffne diese Datei nun mit Word. Über "Suchen und Ersetzen" kannst du das das "Trennzeichen" (;) z.B. durch einen Leerschlag ersetzten. Lässt du bei "Ersetzen" das Feld leer, rücken die Einträge zusammen. Anschliessend speicherst du diese Datei im gewünschten Format ab.

gruss
mac
 

2cool

Mitglied
Hallo Mac
habe dies auch schon Versucht, Word bietet aber auch die Möglichkeit MSDOS-Textdateien mit CRLF zu generieren. Nun dacht ich es gibt auch in Excel diese Möglichkeit, ich möcht nämlich den Umweg über Word vermeiden, da ich diese File monatlich generieren muss.

Gruss 2cool
 
A

abu

Guest
Hier mein Vorschlag:
Richte dir einen separaten Drucker-Treiber für "Text only" mit Ausgabe auf Datei ein. Damit kannst du dann deine Excel- in Text-Dateien umwandeln. Die Einrichtung eines solchen Druckers ist wohl auch etwas System abhängig. Probiere es einfach aus und frage konkret, wenn du nicht mehr weiterkommst.
 

2cool

Mitglied
Hallo Leute, hab mal eure Vorschläge durchgetest. Leider hat keiner so richtig funktionier.
Hab mal ein Makro im Word aufgezeichnet, so wird die Datei richtige generiert:

Sub Speichern_mit_CRLF()
'
' Speichern_mit_CRLF Makro
' Makro aufgezeichnet am 11.08.2008 von mvpli
'
ActiveDocument.SaveAs FileName:="test.20", FileFormat:=wdFormatText, _
LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _
:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
False, Encoding:=437, InsertLineBreaks:=True, AllowSubstitutions:=False, _
LineEnding:=wdCRLF
End Sub

Nun würde ich das ganze aber lieber gleich aus Excel generieren. Hat da jemand genung VBA-Kentnisse um das Markro für Excel zu schreiben?

Danke 2cool
 

2cool

Mitglied
Hallo ABU, wie richte ich einen Drucker mit "Text only" habe WinXP und bin in eimen Firmennetz, habe also nur beschränkte Rechte.

Danke 2cool
 

Thomas Ramel

Stammgast
Grüezi Cool

Mit Excel klappt das nich in der gleichen Art wie mit Word, da Excel in erster Linie als Tebellenkalkulation ausgelegt ist.

Aber teste doch mal den folgenden Code und passe Pfad wie Dateinamen an deine Bedürfnisse an:


Code:
Sub SaveCSV_a()
Dim a               As Variant
Dim B()             As String
Dim D()             As String
Dim Z               As Long
Dim S               As Byte
Dim R               As Long
Dim C               As Byte

   'Speicherpfad eintragen
Const Path          As String = "C:\Test\"
   'Dateiname eintragen
Const filename      As String = "Test2"
   'Dateiendung anpassen (.txt, .csv oder andere)
Const Extension     As String = ".TXT"
   'Trennzeichen anpassen (Semikolon, Komma oder andere)
Const Separator     As String = " "
   'Texerkennungszeichen anpassen (kann meist so bleiben)
Const Wrapper       As String = """"

   'Zu speichernden Bereich eintragen z.B:
   'Worksheet("DeinTabellenblatt").UsedRange
   'Worksheet("DeinTabellenblatt").Range("A1:B10")

   a = ActiveSheet.UsedRange

   If Not IsEmpty(a) Then
      Z = UBound(a, 1)
      S = UBound(a, 2)
      ReDim B(S - 1)
      ReDim D(Z - 1)
      For R = 1 To Z
         For C = 1 To S
            If InStr(1, a(R, C), Separator) > 0 Then
   'Rows whith cells including the Separator
   'put in Wrapper
               B(C - 1) = Wrapper & a(R, C) & Wrapper
            Else
               B(C - 1) = a(R, C)
            End If
         Next C
         D(R - 1) = Join(B(), Separator)
      Next R
      Open Path & filename & Extension For Output As #1
      Print #1, Join(D(), vbCrLf)
      Close #1
   End If
End Sub
 

2cool

Mitglied
Hallo Thomas
so klappt das wunderbar danke für Deine Hilfe.
Möchte an den Dateinamen noch das Tagesdatum anhängen. Hast Du da einen Tipp?

Gruss 2cool
 

Thomas Ramel

Stammgast
Grüezi 2cool

Passe die Deklaratin für den Dateinamen wie folgt an, dann wird jeweils das Tagesdatum angehängt (welches Du auch noch formatieren kannst wie Du möchtest indem Du die Format-Kürzel umstellst):

Code:
Dim filename                  As String
    filename = "Test2 " & Format(Date, "dd-mm-yyyy")
    MsgBox filename
 

evin

Neues Mitglied
Echtes Tabstopp-Zeichen als Trennzeichen in txt-Datei schreiben

Hallo Thomas,

danke für den Tipp.

wenn ich als Trennzeichen das | Symbol wähle (Pipe), dann sieht meine txt-Datei etwa wie folgt aus:


1|eins|1|eins|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2|zwei|2|zwei|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3|drei|3|drei|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4|vier|4|vier|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5|fünf|5|fünf|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7|eins|7|eins|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8|zwei|8|zwei|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
9|drei|9|drei|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10|vier|10|vier|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
11|fünf|11|fünf|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||


Wäre es möglich die Trennzeichen nur zw. den vorhandenen Werten zu setzen und alle restlichen danach (nach rechts und nach unten) nicht zu schreiben?
Wenn ich in der Zeile
Const Separator As String = " "
das Tabstopp-Zeichen setze, dann schreibt das Makro glaube ich 3x Leerzeichen zw. den Werten aus:

1 eins 1 eins
2 zwei 2 zwei
3 drei 3 drei
4 vier 4 vier
5 fünf 5 fünf

7 eins 7 eins
8 zwei 8 zwei
9 drei 9 drei
10 vier 10 vier
11 fünf 11 fünf

Wenn ich allerdings die Excel-Tabelle als Text (Tabstopp-getrennt) (*.txt) abspeichere, dann sind echte TAB-Zeichen als Delimeter vorhanden.
Warum ist es so?

Danke sehr.

gruß
evin
 

Thomas Ramel

Stammgast
Grüezi Evin

Dass da mehr Spalten/Zeilen ausgeschrieben werden als Daten vorhanden sind liegt daran, dass da mal Werte oder Formatierungen drin gestanden haben.

Lösche daher diese Zeilen/Spalten komplett, speichere und schliesse die Datei und öffne sie dann wieder.
Danach sollte der Bereich korrekt ausgeschrieben werden.


Die TAB-Taste alleine reicht nicht aus um die Daten mit TAB zu trennen. Verwende stattdessen diese Zeile hier:

Const Separator As String = vbTab
 
Oben