3.8k Aufrufe
Gefragt in Tabellenkalkulation von halfstone Profi (18.3k Punkte)
Hi an die hilfsbereiten Excelprofis hier,

ich will eine Textdatei, die ich mit pdf2txt aus einer PDF Datei ausgelesen habe in Excel einlesen um sie dann in einer Google Map anzeige zu lassen.

Dazu muss die Adresse in ein Feld einer Zeile in er Exceldatei landen.

Da die Daten zwar strukturiert sind aber nicht so wie ich das lösen könnte braucht man da wohl irgendeine Art von Script/Macro.

Da es viele Daten sind und das Ganze auch einmal im Monat neu eigelesen werden soll kann ich es nicht manuell machen.

Hier mal Beispieldaten:

Beispieldatei in Textform

Das hier sind drei Datensätze von denen ich aus der

8. Zeile den Namen und die Adresse in jeweils einem Feld brauche

11.-12. Zeile das Datum, die Punktezahl und das Ergebnis

Die Zeilennummern nur um die genaue Stelle zu beschreiben, das geht in diesem Textbeispiel natürlich drei mal so da es drei komplette Datensätze sind.

Leider müsst ihr mir genau sagen wie das in Excel einzufügen ist, hab schon ewig nichts mehr mit Excel gemacht. Ich habe hier Excel 2010.

Danke schon mal

Fabian

10 Antworten

0 Punkte
Beantwortet von halfstone Profi (18.3k Punkte)
Hmm, hab ich meine Frage falsch gestellt oder ist das nicht zu lösen?

Gruß Fabian
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Fabian,

im Moment ist Deine Frage, für mich, noch ein Buch mit sieben Siegeln.

Vielleicht könntest Du Dir mal die Mühe machen, den geposteten Text (per Handarbeit) so in ein Excel-Arbeitsblatt unterzubringen, wie Du es wünschst und diese Arbeitsmappe dann ebenfalls posten.

Du müsstest aber haargenau den Text verarbeiten, den Du bereits gepostet hast um Fehler zu verhindern.

Ich weiß nicht, ob ich Dir dann helfen kann, aber zumindest wird mir Dein Anliegen etwas deutlicher.

Gruß
Rainer
0 Punkte
Beantwortet von halfstone Profi (18.3k Punkte)
HI Rainer,

das mache ich doch gerne:

Beim Bearbeite hab ich gesehen, dass in der Textdatei nur zwei Datensätze sind falls du noch mehr brauchst mache ich gerne eine mit mehr Daten.

Smiley-Beispieldatei

Gruß und Danke für deine Hilfe

Fabian
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Fabian.

da muss ich Dich leider enttäuschen.

Nach meinen Erfahrungen lässt sich aus den Quelldaten kein Algorithmus
entwickeln der es zulässt, weder mit Formel noch mit VBA, die
gewünschten Daten zu extrahieren.

Selbst eine vertretbare vorherige Handarbeit, um die Quelldaten für eine
Automatisierung vorzubereiten, fällt mir dazu nicht ein.

Tut mit leid, da kann ich Dir leider nicht helfen.

Gruß
Rainer
0 Punkte
Beantwortet von halfstone Profi (18.3k Punkte)
Hi Rainer,

Danke für deine Hilfe, vielleicht ist es doch besser das mit perl oder python zu machen.

Ich schaue mal ob es damit geht, falls hier jemand noch eine Idee hat immer gerne.

Gruß Fabian
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Fabian ^^

teste mal :-)

gruss nighty

zu beschleunigen geht noch einiges
erstmal ansätze finden

alt+f11 > in ein allgemeines modul erstmal
später eventuell eine Schaltfläche oder aehnliche Elemente

meine ansätze zur Lokalisierung der Daten
eine zahl größer als null + das wort "Berlin"

das laufwerk und der pfad waere bei dem open befehl anzupassn

Sub Fabian()
Dim t As Long, Tzeilen As Long, Posstadt As Long
Dim NrZahl As Long, Zpos As Long, Lzeile As Long
Dim strAlles As String
Dim strDaten() As String
Open "d:\temp\fb.txt" For Binary As #1
strAlles = Space(LOF(1))
Get #1, , strAlles
Close #1
If Not Right(strAlles, 2) = vbCrLf Then strAlles = strAlles & vbCrLf
strDaten = Split(strAlles, vbCrLf)
For Tzeilen = 7 To UBound(strDaten())
Posstadt = InStr(1, strDaten(Tzeilen), "Berlin")
If Posstadt > 0 Then
NrZahl = Val(Mid(strDaten(Tzeilen), Posstadt - 6, 5))
If NrZahl > 0 Then
Lzeile = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Cells(Lzeile, 1) = Mid(strDaten(Tzeilen), 1, Len(strDaten(Tzeilen)) - (Len(strDaten(Tzeilen)) - Posstadt) - 7)
Cells(Lzeile, 2) = Mid(strDaten(Tzeilen), Posstadt - 6, Len(strDaten(Tzeilen)))
Cells(Lzeile, 3) = Mid(strDaten(Tzeilen + 3), 1, 10)
Cells(Lzeile, 4) = Mid(strDaten(Tzeilen + 3), 11, Len(strDaten(Tzeilen)) - 10)
Cells(Lzeile, 5) = Mid(strDaten(Tzeilen + 4), 1, Len(strDaten(Tzeilen)))
End If
End If
Next Tzeilen
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Fabian :-)

jetzt mit dateiauswahl ^^

gruss nighty

Sub Fabian()
Dim t As Long, Tzeilen As Long, Posstadt As Long
Dim NrZahl As Long, Zpos As Long, Lzeile As Long
Dim strAlles As String
Dim strDaten() As String
Open Application.GetOpenFilename("Txt-Dateien (*.txt), *.txt", , "Datei auswählen", , False) For Binary As #1
strAlles = Space(LOF(1))
Get #1, , strAlles
Close #1
If Not Right(strAlles, 2) = vbCrLf Then strAlles = strAlles & vbCrLf
strDaten = Split(strAlles, vbCrLf)
For Tzeilen = 7 To UBound(strDaten())
Posstadt = InStr(1, strDaten(Tzeilen), "Berlin")
If Posstadt > 0 Then
NrZahl = Val(Mid(strDaten(Tzeilen), Posstadt - 6, 5))
If NrZahl > 0 Then
Lzeile = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Cells(Lzeile, 1) = Mid(strDaten(Tzeilen), 1, Len(strDaten(Tzeilen)) - (Len(strDaten(Tzeilen)) - Posstadt) - 7)
Cells(Lzeile, 2) = Mid(strDaten(Tzeilen), Posstadt - 6, Len(strDaten(Tzeilen)))
Cells(Lzeile, 3) = Mid(strDaten(Tzeilen + 3), 1, 10)
Cells(Lzeile, 4) = Mid(strDaten(Tzeilen + 3), 11, Len(strDaten(Tzeilen)) - 10)
Cells(Lzeile, 5) = Mid(strDaten(Tzeilen + 4), 1, Len(strDaten(Tzeilen)))
End If
End If
Next Tzeilen
End Sub
0 Punkte
Beantwortet von halfstone Profi (18.3k Punkte)
Hi nighty,

krass, funktioniert super, bin beeindruckt. Hab etwas rumfriemeln müssen wir man das als modul da reinparkt aber das ging schnell. Die Daten scheinen ohne Probleme und richtig eingelesen zu werden.

Wenn das Ganze fertig ist, zeige ich dir natürlich genauer wozu das Ganze gut war.

Vielen Dank

Fabian
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Fabian ^^

ist die Laufzeit bei großen Datenmengen akzeptabel ?

denkbar waere auch eine variante die alle txt aus einem ordner sammelt ?

ansonsten viel spass bei deinem projekt :-)

gruss nighty
0 Punkte
Beantwortet von halfstone Profi (18.3k Punkte)
Hi nighty,

die Daten sind diesmal nicht ganz so viele. Mit ca. 600 Datensätzen war das super schnell eingelesen. Auf jeden Fall sehr viel
schneller als per Hand eingegeben.

Vielen Dank nochmal und wie gesagt wenn ich etwas weiter bin bekommts du das Ergebnis als erster zu Gesicht.

Gruß Fabian
...