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!
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!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 281358
Url: https://administrator.de/contentid/281358
Ausgedruckt am: 24.11.2024 um 18:11 Uhr
4 Kommentare
Neuester Kommentar
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
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
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
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
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
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\-]+) (.*)
1. Max Mustermanns Musterhäuser
2. Musterstraße 123
3. 12345
4. Musterstadt
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