atompiltz
Goto Top

Excel 2013 - Daten aus Word Datei ohne Trennzeichen importieren

Hallo zusammen,

ich möchte die Adressdaten aus einer Word-Datei in Excel importieren. Jede Adresse ist in einer Zeile geschrieben, nur leider ohne Trennzeichen, Tabulator oder ähnliches. Wie kann ich nun einen sinnvollen Datenimport anschieben, sodass die Felder: Firma, Straße, Hausnummer, PLZ, Ort korrekt gefüllt werden? Die Daten sehen wie folgt aus:

Max Mustermanns Musterhäuser Musterstraße 123 12345 Musterstadt
Max Musterfraus Musterautos Musterweg 321 54321 Musterdorf
etc...

So bekomme ich die Infos nur in einer Spalte in Excel importiert. Aus meinen bisherigen Erfahrungen bräuchte ich einen Aufbau mit Trennzeichen.. habe ich aber nicht...

"Max Mustermanns Musterhäuser" "Musterstraße" "123" "12345" "Musterstadt"

Hat jemand einen schönen Tipp?

Vielen Dank schon jetzt!

Content-ID: 281358

Url: https://administrator.de/contentid/281358

Ausgedruckt am: 24.11.2024 um 18:11 Uhr

114757
114757 28.08.2015 aktualisiert um 09:33:05 Uhr
Goto Top
Moin,
das wird schwierig, denn woher sollte das Skript wissen aus wie vielen Wörtern der Name oder die Strasse besteht? Man kann zwar mit Regular Expressions einiges in dieser Hinsicht machen, aber das obige Grundproblem der Variabilität der Leerzeichen bleibt.

In deinem Beispiel etwa
Max Mustermanns Musterhäuser Musterstraße 123 12345 Musterstadt
müsste das Skript entscheiden können ob das "Musterhäuser" mit zum Strassennamen gehört oder zum Namen, oder ob der Strassennamen nicht doch eher "Mustermanns Musterhäuser Musterstraße" lautet.

Auch wenn man anhand der Leerzeichen trennt hast du deswegen kein Erfolg.

Könntest du bei der Straße sicherstellen das sie immer ohne ein Leerzeichen im Straßennamen vorliegt ließe sich das realisieren.

Anaonsten wirst du wohl oder übel Hand anlegen müssen, wenn es bei den Addressen kein einigermassen eindeutiges Muster gibt.

Gruß jodel32
Maveric
Maveric 28.08.2015 um 09:54:37 Uhr
Goto Top
Moin,

das ist gar nicht so schwer. Schreib dir ein kleines Skript (z.b. Perl) welches
Zeilenweise den Datenbestand durchgeht und per regex sowohl Textqualifizierer
einbaut als auch ein eindeutiges Trennzeichen ergänzt.

Wenn alle Daten das selbe Muster haben ist das gar kein Problem. Also dein Muster
wäre ja "gesprochen" :

1. Lese Zeile 1 und stecke jede Zeichenkette bis zum Leerzeichen in variablen 1-7. Hier mal ein Beispiel für den passenden Regex String: http://rubular.com/r/dB2d6pGpns
2. Dann baue neuen String aus: "Variable1 Variable 2 Variable3" , "Variable4" , "Variable5" , "Variable6" , "Variable7"
3. In Schritt 3 Steckst du den String direkt in ein neues Dokument oder bastelst im Programm alles zusammen und gibst es zum Schluss in ein Dokument aus.

Das Dokument was hieraus entsteht entspricht jetzt deinen Anforderungen und
du kannst es wie gewohnt in Excel einlesen.

Wenn du Hilfe beim Skripten brauchst schreib gern dann helfe ich auch hier.

Gruß
Maveric
114757
114757 28.08.2015 aktualisiert um 13:22:46 Uhr
Goto Top
Wenn alle Daten das selbe Muster haben ist das gar kein Problem
Das ist es ja, ich glaube nicht das alle seine Namen zwei Leerzeichen inne haben, dann kommst du nämlich in die oben von mir genannte Breduille ob ein Teil dann noch zum Namen oder schon zur Straße gehört. Wenn die Straße nirgendwo ein Leerzeichen haben sollte wäre es ja kein problem mit einem Regex denn dann würde ein Wort immer mit der Hausnummer verbunden.
^(.*?) ([^\s]+ \d+) ([\d\-]+) (.*)
Matchgroups:
1.	Max Mustermanns Musterhäuser
2.	Musterstraße 123
3.	12345
4.	Musterstadt
Aber so müsste das Skript intelligente Namenanalyse der Straßennamen durchführen was aber ziemlich aufwändig wäre.

Also bei Straßennamen die immer zusammenhängend sind ginge das mit einem Excel VBA-Makro folgendermaßen:
Sub ImportWordAddresses()
    Dim objWord As Object, doc As Object, rng As Range, regex As Object, i As Long
    Const PATH = "C:\demo.docx"  
    
    Set objWord = CreateObject("Word.Application")  
    Set regex = CreateObject("vbscript.regexp")  
    regex.IgnoreCase = True
    regex.Pattern = "^(.*?) ([^\s]+ \d+) ([\d\-]+) (.*)"  
    
    With ActiveSheet
        .Range("A1:D1").Value = Array("Name", "Straße", "PLZ", "Ort")  
        .Range("A1:D1").Font.Bold = True  
        Set rng = .Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)  
        
        
        Set doc = objWord.Documents.Open(PATH)
        arrContent = Split(doc.Content.Text, Chr(13))
        objWord.Quit False
        
        For i = 0 To UBound(arrContent)
            Set matches = regex.Execute(arrContent(i))
            If matches.Count > 0 Then
                rng.Resize(1, 4).Value = Array(matches(0).submatches(0), matches(0).submatches(1), matches(0).submatches(2), matches(0).submatches(3))
                Set rng = rng.Offset(1, 0)
            End If
        Next
        
        .Range("A:D").EntireColumn.AutoFit  
    End With
End Sub
Gruß jodel32
Atompiltz
Atompiltz 28.08.2015 um 13:18:26 Uhr
Goto Top
Hallo!

Danke für die Ratschläge.

Es ist in der Tat leider so (daher komm ich auch nicht weiter), dass die Anschriften durchaus verschieden sind. Z.B.

Da sind dann auch Einträge wie:

A+B Musterhausbau & Fensterherstellung GmbH Müllerweg 123-125 54321 Müllerstadt-Teilstadt Deutschland

und so weiter bei... also nicht eindeutig zu definieren. Totaler Mist.