EXCEL Mehrzeiler aus Textdatei als Mehrzeiler in eine einzlene Zeile importieren
Hallo Gemeinde,
Kann sein, dass ich mal wieder komplett um 5 Ecken denke. Ich erläuter am besten mal mein Problem:
Ich habe eine Textdatei welche wievolgt aufgebaut ist:
Dateiname [Tapstop] Datum [Tapstop] Mehrzeilige Erläuterung
Beispiel:
Wenn ich das nun in Excel importiere werden die Spalten zwar richtig angelegt, wie bekomme ich es aber hin, dass die Mehrzeilige Erläuterung mit Zeilenumbruch in einer einzelnen Zeile steht, dass ich so zusagen in Zeile 2 auch schon die nächste Datei habe?
Ich hoffe ihr könnt einem Excel Neuling etwas unter die Arme greifen...
Viele Grüße
Robert
Kann sein, dass ich mal wieder komplett um 5 Ecken denke. Ich erläuter am besten mal mein Problem:
Ich habe eine Textdatei welche wievolgt aufgebaut ist:
Dateiname [Tapstop] Datum [Tapstop] Mehrzeilige Erläuterung
Beispiel:
testdatei.zip 2012-08-17 Diese Datei enthält
diverse Projekte:
BLABLALBA.....
nächstedatei.zip Datum Blablabla
blablabla
Wenn ich das nun in Excel importiere werden die Spalten zwar richtig angelegt, wie bekomme ich es aber hin, dass die Mehrzeilige Erläuterung mit Zeilenumbruch in einer einzelnen Zeile steht, dass ich so zusagen in Zeile 2 auch schon die nächste Datei habe?
Ich hoffe ihr könnt einem Excel Neuling etwas unter die Arme greifen...
Viele Grüße
Robert
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 189751
Url: https://administrator.de/forum/excel-mehrzeiler-aus-textdatei-als-mehrzeiler-in-eine-einzlene-zeile-importieren-189751.html
Ausgedruckt am: 11.01.2025 um 03:01 Uhr
12 Kommentare
Neuester Kommentar
Hallo Robert!
Dazu müsstest Du den Text zuvor entsprechend konvertieren.
Ein normaler Zeilenumbruch besteht aus zwei Zeichen CR + LF und wenn Du Mehrzeiler in einer Zelle haben willst, dann müssen die betreffenden CR's entfernt werden. D.h. das an den bereffenden Stellen nur ein LF steht und das wiederum entspricht einem 'Alt+Return' innerhalb einer Zelle.
Gruß Dieter
Dazu müsstest Du den Text zuvor entsprechend konvertieren.
Ein normaler Zeilenumbruch besteht aus zwei Zeichen CR + LF und wenn Du Mehrzeiler in einer Zelle haben willst, dann müssen die betreffenden CR's entfernt werden. D.h. das an den bereffenden Stellen nur ein LF steht und das wiederum entspricht einem 'Alt+Return' innerhalb einer Zelle.
Gruß Dieter
Hallo romberto!
Wenn am Beginn der Zeilen 2, 3 und 5 jeweils 2 TAB stehen und es genügt, die Zeilenschaltungen durch Leerzeichen zu ersetzen, sollte das folgende VBScript eine für den Import passende Datei erstellen:
Wenn Du die Zeile 5 durch
ersetzt, kannst Du das auch als Makro in einer Excel-Datei verwenden ...
Grüße
bastla
Wenn am Beginn der Zeilen 2, 3 und 5 jeweils 2 TAB stehen und es genügt, die Zeilenschaltungen durch Leerzeichen zu ersetzen, sollte das folgende VBScript eine für den Import passende Datei erstellen:
Ein = "D:\MitUmbruch.txt"
Aus = "D:\OhneUmbruch.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Set rE = New RegExp
rE.Global = True
rE.Pattern = "\r\n\t\t"
fso.CreateTextFile(Aus).Write rE.Replace(fso.OpenTextFile(Ein).ReadAll, " ")
Set rE = CreateObject("VBScript.RegExp")
Grüße
bastla
Hallo bastla!
Habe festgestellt, dass der Textimport die LF's als normalen Zeilenumbruch interpretiert, also indem Fall leider doch nicht funktioniert
Für Dein Skript hätte ich folgenden Verbesserungsvorschlag:
wobei alle Tabs/Leerzeichen nach einem Zeilenumbruch ersetzt werden.
Gruß Dieter
Habe festgestellt, dass der Textimport die LF's als normalen Zeilenumbruch interpretiert, also indem Fall leider doch nicht funktioniert
Für Dein Skript hätte ich folgenden Verbesserungsvorschlag:
rE.Pattern = "\r\n\s{1,}"
Gruß Dieter
@Dieter
Dein Verbesserungsvorschlag ist sinnvoll und lässt sich noch etwas eleganter formulieren:
Grüße
bastla
Habe festgestellt, dass der Textimport die LF's als normalen Zeilenumbruch interpretiert
... weswegen ich auch in meinem Vorschlag Leerzeichen anstelle des LF angeboten habe ...Dein Verbesserungsvorschlag ist sinnvoll und lässt sich noch etwas eleganter formulieren:
rE.Pattern = "\r\n\s+"
bastla
[OT]
@bastla
gerechnet
Gruß Dieter
[/OT]
@bastla
... und lässt sich noch etwas eleganter formulieren:
Stimmt, hatte allerdings mit einemrE.Pattern = "\r\n\s+"
rE.Pattern = "\r\s{2,}"
Gruß Dieter
[/OT]
Hallo Dieter!
Das würde zwar meinem obigen Ansatz genauer entsprechen, aber es fehlt ja ohnehin noch ein Feedback, ob die Annahme, dass die Folgezeilen mit jeweils 2 TAB beginnen würden, überhaupt stimmt - um dem geposteten Beispiel zu entsprechen, passt es aber mit nur einem Whitespace am Zeilenanfang ...
Grüße
bastla
Das würde zwar meinem obigen Ansatz genauer entsprechen, aber es fehlt ja ohnehin noch ein Feedback, ob die Annahme, dass die Folgezeilen mit jeweils 2 TAB beginnen würden, überhaupt stimmt - um dem geposteten Beispiel zu entsprechen, passt es aber mit nur einem Whitespace am Zeilenanfang ...
Grüße
bastla
[OT]
Hallo bastla!
Ob der Zeilenanfang jetzt mit 1, 2, 3... Tabs oder Leerzeichen beginnen ist ja ohne Bedeutung. Von dem abgesehen würden 2 Tab's eh nicht ausreichen, um die unteren Texte in die Beispiel-Position zu bringen. Daher war/ist mein Ansatz eigentlich, nach dem '\r' mindestens 2 Zeichen aus (\n, \t, " ", ...) und x-beliebig nachfolgende (/t oder " "), was ja auch mit "\r\n\s+" gegeben ist. Insofern war mein letzter Ansatz eigentlich als nicht ernstzunehmender Scherz gedacht und hoffe Du vergibst mir
Gruß Dieter
[/OT]
Hallo bastla!
Ob der Zeilenanfang jetzt mit 1, 2, 3... Tabs oder Leerzeichen beginnen ist ja ohne Bedeutung. Von dem abgesehen würden 2 Tab's eh nicht ausreichen, um die unteren Texte in die Beispiel-Position zu bringen. Daher war/ist mein Ansatz eigentlich, nach dem '\r' mindestens 2 Zeichen aus (\n, \t, " ", ...) und x-beliebig nachfolgende (/t oder " "), was ja auch mit "\r\n\s+" gegeben ist. Insofern war mein letzter Ansatz eigentlich als nicht ernstzunehmender Scherz gedacht und hoffe Du vergibst mir
Gruß Dieter
[/OT]
Hallo Dieter!
Grüße
bastla
Von dem abgesehen würden 2 Tab's eh nicht ausreichen, um die unteren Texte in die Beispiel-Position zu bringen.
Hatte ich auch überlegt;Wenn ich das nun in Excel importiere werden die Spalten zwar richtig angelegt
würde aber wieder darauf hinweisen, dass es doch genau die 2 TAB sind ... Insofern war mein letzter Ansatz eigentlich als nicht ernstzunehmender Scherz gedacht und hoffe Du vergibst mir
Aber nur ausnahmsweise Grüße
bastla
Hallo Zusammen!
Um tatsächlich die Zeilenumbrüche in Spalte 3 so zu setzen, wie sie in der Textdatei auftreten, könnte man eure Ansätze gleich in ein Excel Makro packen.
Etwa so:
Grüße
rubberman
Um tatsächlich die Zeilenumbrüche in Spalte 3 so zu setzen, wie sie in der Textdatei auftreten, könnte man eure Ansätze gleich in ein Excel Makro packen.
Etwa so:
Sub import()
Dim sFName, iFNum As Integer, sText As String, i As Long, aLines, _
oWb As Excel.Workbook, oWs As Excel.Worksheet
sFName = Application.GetOpenFilename( _
Title:="Wähle eine Datei zum Importieren aus ...", _
FileFilter:="Text Dateien *.txt (*.txt),", _
MultiSelect:=False)
If sFName = False Then Exit Sub
iFNum = FreeFile()
Open sFName For Input As iFNum
sText = Input(LOF(iFNum), iFNum)
Close iFNum
Set oWb = Application.Workbooks.Add(xlWBATWorksheet)
Set oWs = oWb.Worksheets(1)
oWs.Name = _
CreateObject("Scripting.FileSystemObject").GetFileName(sFName)
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "\r\n\s+"
sText = .Replace(sText, vbLf)
End With
aLines = Split(sText, vbCrLf)
For i = 0 To UBound(aLines)
oWs.Range(Cells(i + 1, 1), Cells(i + 1, 3)) = Split(aLines(i), vbTab)
Next
End Sub
Grüße
rubberman
Hallo rubberman!
Nach dem Motto, Nägel mit Köpfen machen dann der Vollständigkeit halber noch die Vorlage-Variante (.*xlt) mit Leerzeichen. Gefällt mir im Tabellenblatt optisch besser und per AutoFit kann die optimale Spaltenbreite angepasst werden, was beim Mehrzeiler leider nicht funktioniert.
Gruß Dieter
Nach dem Motto, Nägel mit Köpfen machen dann der Vollständigkeit halber noch die Vorlage-Variante (.*xlt) mit Leerzeichen. Gefällt mir im Tabellenblatt optisch besser und per AutoFit kann die optimale Spaltenbreite angepasst werden, was beim Mehrzeiler leider nicht funktioniert.
Option Explicit
Private Const DlgT = "Wähle eine Datei zum Importieren aus ..."
Private Const DlgF = "Text Dateien (*.txt), *.txt"
Sub TextImport()
Dim sFileName As Variant, Text As Variant, i As Long
sFileName = Application.GetOpenFilename(Title:=DlgT, FileFilter:=DlgF, MultiSelect:=False)
If sFileName = False Then Exit Sub
Text = CreateObject("Scripting.FileSystemObject").OpenTextFile(sFileName).ReadAll
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "\r\n\s+"
Text = Split(.Replace(Text, " "), vbCrLf)
End With
With Sheets(1)
.Cells.ClearContents
For i = 0 To UBound(Text)
If Text(i) <> "" Then
Cells(i + 1, "A").Resize(1, 3) = Split(Text(i), vbTab)
End If
Next
.Columns("A:C").AutoFit
End With
End Sub
Gruß Dieter
Hallo Dieter!
Jein. Wenn die Breite dabei kleiner wird, funktioniert es. Muss sie größer werden, dann nicht. (Warum das so ist, wird mir wohl ewig ein Rätsel bleiben.)
Workaround könnte so aussehen:
~~~ snip ~~~
~~~ snip ~~~
Grüße
rubberman
Zitat von @76109:
... per AutoFit kann die optimale Spaltenbreite angepasst werden, was beim Mehrzeiler leider nicht funktioniert.
... per AutoFit kann die optimale Spaltenbreite angepasst werden, was beim Mehrzeiler leider nicht funktioniert.
Jein. Wenn die Breite dabei kleiner wird, funktioniert es. Muss sie größer werden, dann nicht. (Warum das so ist, wird mir wohl ewig ein Rätsel bleiben.)
Workaround könnte so aussehen:
~~~ snip ~~~
With oWs.UsedRange
.Cells.VerticalAlignment = xlTop
.ColumnWidth = 200
.RowHeight = 300
.Columns.AutoFit
.Rows.AutoFit
End With
Grüße
rubberman
Hallo rubberman!
Funktioniert Danke für den Tip!
Gruß Dieter
Funktioniert Danke für den Tip!
Gruß Dieter