Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

EXCEL Mehrzeiler aus Textdatei als Mehrzeiler in eine einzlene Zeile importieren

Frage Microsoft Microsoft Office

Mitglied: romberto

romberto (Level 1) - Jetzt verbinden

17.08.2012, aktualisiert 29.01.2013, 5268 Aufrufe, 12 Kommentare

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:

01.
testdatei.zip      2012-08-17      Diese Datei enthält 
02.
                                   diverse Projekte: 
03.
                                   BLABLALBA..... 
04.
nächstedatei.zip   Datum           Blablabla 
05.
                                   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
Mitglied: 76109
17.08.2012, aktualisiert um 11:32 Uhr
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
Bitte warten ..
Mitglied: bastla
17.08.2012 um 12:04 Uhr
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:
01.
Ein = "D:\MitUmbruch.txt" 
02.
Aus = "D:\OhneUmbruch.txt" 
03.
 
04.
Set fso = CreateObject("Scripting.FileSystemObject") 
05.
Set rE = New RegExp 
06.
rE.Global = True 
07.
rE.Pattern = "\r\n\t\t" 
08.
 
09.
fso.CreateTextFile(Aus).Write rE.Replace(fso.OpenTextFile(Ein).ReadAll, " ")
Wenn Du die Zeile 5 durch
Set rE = CreateObject("VBScript.RegExp")
ersetzt, kannst Du das auch als Makro in einer Excel-Datei verwenden ...

Grüße
bastla
Bitte warten ..
Mitglied: 76109
18.08.2012, aktualisiert um 14:44 Uhr
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:
01.
rE.Pattern = "\r\n\s{1,}"
wobei alle Tabs/Leerzeichen nach einem Zeilenumbruch ersetzt werden.

Gruß Dieter
Bitte warten ..
Mitglied: bastla
18.08.2012 um 15:23 Uhr
@Dieter
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+"
Grüße
bastla
Bitte warten ..
Mitglied: 76109
18.08.2012, aktualisiert um 18:30 Uhr
[OT]
@bastla
... und lässt sich noch etwas eleganter formulieren:
rE.Pattern = "\r\n\s+"
Stimmt, hatte allerdings mit einem
rE.Pattern = "\r\s{2,}"
gerechnet

Gruß Dieter
[/OT]
Bitte warten ..
Mitglied: bastla
18.08.2012 um 16:50 Uhr
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
Bitte warten ..
Mitglied: 76109
18.08.2012, aktualisiert um 18:31 Uhr
[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]
Bitte warten ..
Mitglied: bastla
18.08.2012 um 18:32 Uhr
Hallo Dieter!
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
Bitte warten ..
Mitglied: rubberman
18.08.2012, aktualisiert um 18:46 Uhr
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:
01.
Sub import() 
02.
    Dim sFName, iFNum As Integer, sText As String, i As Long, aLines, _ 
03.
        oWb As Excel.Workbook, oWs As Excel.Worksheet 
04.
    sFName = Application.GetOpenFilename( _ 
05.
        Title:="Wähle eine Datei zum Importieren aus ...", _ 
06.
        FileFilter:="Text Dateien *.txt (*.txt),", _ 
07.
        MultiSelect:=False) 
08.
    If sFName = False Then Exit Sub 
09.
    iFNum = FreeFile() 
10.
    Open sFName For Input As iFNum 
11.
    sText = Input(LOF(iFNum), iFNum) 
12.
    Close iFNum 
13.
    Set oWb = Application.Workbooks.Add(xlWBATWorksheet) 
14.
    Set oWs = oWb.Worksheets(1) 
15.
    oWs.Name = _ 
16.
        CreateObject("Scripting.FileSystemObject").GetFileName(sFName) 
17.
    With CreateObject("VBScript.RegExp") 
18.
        .Global = True 
19.
        .Pattern = "\r\n\s+" 
20.
        sText = .Replace(sText, vbLf) 
21.
    End With 
22.
    aLines = Split(sText, vbCrLf) 
23.
    For i = 0 To UBound(aLines) 
24.
        oWs.Range(Cells(i + 1, 1), Cells(i + 1, 3)) = Split(aLines(i), vbTab) 
25.
    Next 
26.
End Sub
Grüße
rubberman
Bitte warten ..
Mitglied: 76109
18.08.2012 um 23:44 Uhr
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.
01.
Option Explicit 
02.
 
03.
Private Const DlgT = "Wähle eine Datei zum Importieren aus ..." 
04.
Private Const DlgF = "Text Dateien (*.txt), *.txt" 
05.
 
06.
Sub TextImport() 
07.
    Dim sFileName As Variant, Text As Variant, i As Long 
08.
 
09.
    sFileName = Application.GetOpenFilename(Title:=DlgT, FileFilter:=DlgF, MultiSelect:=False) 
10.
     
11.
    If sFileName = False Then Exit Sub 
12.
     
13.
    Text = CreateObject("Scripting.FileSystemObject").OpenTextFile(sFileName).ReadAll 
14.
     
15.
    With CreateObject("VBScript.RegExp") 
16.
        .Global = True 
17.
        .Pattern = "\r\n\s+" 
18.
         Text = Split(.Replace(Text, " "), vbCrLf) 
19.
    End With 
20.
     
21.
    With Sheets(1) 
22.
       .Cells.ClearContents 
23.
        For i = 0 To UBound(Text) 
24.
            If Text(i) <> "" Then 
25.
                Cells(i + 1, "A").Resize(1, 3) = Split(Text(i), vbTab) 
26.
            End If 
27.
        Next 
28.
       .Columns("A:C").AutoFit 
29.
    End With 
30.
End Sub
Gruß Dieter
Bitte warten ..
Mitglied: rubberman
19.08.2012 um 14:09 Uhr
Hallo Dieter!

Zitat von 76109:
... 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 ~~~
01.
    With oWs.UsedRange 
02.
        .Cells.VerticalAlignment = xlTop 
03.
        .ColumnWidth = 200 
04.
        .RowHeight = 300 
05.
        .Columns.AutoFit 
06.
        .Rows.AutoFit 
07.
    End With
~~~ snip ~~~

Grüße
rubberman
Bitte warten ..
Mitglied: 76109
19.08.2012, aktualisiert um 14:21 Uhr
Hallo rubberman!

Funktioniert Danke für den Tip!

Gruß Dieter
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...