Daten aktualisieren aus txt

hallo allerseits!

folgendes szenario: ich habe eine im web zugängliche txt-datei, die nach dem muster

datenname1;datenname2;datenname3;...
datensatz1;datensatz2;datensatz3;...

aufgebaut ist und mittels php immer wieder mit neuen zeilen beschrieben wird.

wenn ich die URL der datei direkt in excel bei ‚datei öffnen‘ eingebe, kommt so ein kleiner konfigurationsassistent, der mir hilft, diese txt-datei so zu öffnen, daß daraus eine brauchbare excel-tabelle wird. das ist ja auch nicht schwer.

jetzt hätte ich gern folgendes: immer, wenn ich die gespeicherte excel-datei aufmache, soll die tabelle auf den momentanen stand der txt-datei aktualisiert werden, idealerweise ohne daß die in excel vorgenommenen layoutänderungen verlorengehen.

bei daten->externe daten kann ich eine webabfrage erstellen und auch immer wieder ausführen, blöderweise wird dann immer die gesamte datei übernommen (also nicht nur die änderungen), und zwar auch nicht schön spaltenweise, sondern der ganze text einer zeile der textdatei in einer zelle.

hat jemand zufällig eine ahnung, ob das, was ich gern hätte, sich bewerkstelligen läßt, und wenn ja, wie?

Hallo (?),

wenn ich die URL der datei direkt in excel bei ‚datei öffnen‘

kannst du die URL hier posten?

jetzt hätte ich gern folgendes: immer, wenn ich die
gespeicherte excel-datei aufmache, soll die tabelle auf den
momentanen stand der txt-datei aktualisiert werden,
idealerweise ohne daß die in excel vorgenommenen
layoutänderungen verlorengehen.

bei daten->externe daten kann ich eine webabfrage erstellen
und auch immer wieder ausführen, blöderweise wird dann immer
die gesamte datei übernommen (also nicht nur die änderungen),
und zwar auch nicht schön spaltenweise, sondern der ganze text
einer zeile der textdatei in einer zelle.

hat jemand zufällig eine ahnung, ob das, was ich gern hätte,
sich bewerkstelligen läßt, und wenn ja, wie?

ich würd mir das gern ansehen, dann kann ich (oder ein anderer hier) dir vielleicht helfen

Gruß
Marion

kannst du die URL hier posten?

bitte:
http://www.tud.at/gyuri/kursanmeldung.txt

Hallo,

so was ähnliches habe ich auch schon programmiert, allerdings „zu Fuß“ und ohne Webabfrage - das kannte ich gar nicht :o( . Das ist allerdings schon richtig Arbeit und nicht so in 5 Minuten (auch nicht in 3 Stunden) hinzukritzeln. Vom Programmierlevel sollte man auch schon fortgeschritten sein.

jetzt hätte ich gern folgendes: immer, wenn ich die
gespeicherte excel-datei aufmache, soll die tabelle auf den
momentanen stand der txt-datei aktualisiert werden,

Per Workbook_Open-Ereignis.

idealerweise ohne daß die in excel vorgenommenen
layoutänderungen verlorengehen.

Nach der Aktualisierung die Tabelle nach den eigenen Vorstellungen neu formatieren.

bei daten->externe daten kann ich eine webabfrage erstellen
und auch immer wieder ausführen, blöderweise wird dann immer
die gesamte datei übernommen (also nicht nur die änderungen),

„Zu Fuß“ kein Problem - allerdings verstehe ich nicht, warum er nicht die ganzen Daten einlesen darf. Können die neuen Daten falsch sein - oder hängst Du an den alten?

und zwar auch nicht schön spaltenweise, sondern der ganze text
einer zeile der textdatei in einer zelle.

Nur eine Frage, wie man die eingelesenen Daten verarbeitet (s. VBA-Funktion SPLIT).

hat jemand zufällig eine ahnung, ob das, was ich gern hätte,
sich bewerkstelligen läßt, und wenn ja, wie?

Wie gesagt: nur per VBA - sonst weiß ich es nicht (was allerdings nicht viel heißt, da ich mich in Excel nicht sehr gut auskenne, s. Webabfrage).

Martin

Vom
Programmierlevel sollte man auch schon fortgeschritten sein.

gut, also programmieren kann ich schon mal nicht. ich habe gedacht, vielleicht gibt es ja doch eine excel-interne lösung. wenn nicht, ist es an sich auch kein problem, das sheet immer neu aufzumachen und halt nur die relevanten sachen abzuspeichern, aber automatisch wäre schon einfacher.

„Zu Fuß“ kein Problem - allerdings verstehe ich nicht, warum
er nicht die ganzen Daten einlesen darf. Können die neuen
Daten falsch sein - oder hängst Du an den alten?

im prinzip kommen im txt-file immer neue zeilen dazu. wenn ich jedesmal das ganze einlese, dann hab ich irgendwann die älteren zeilen zehnfach drin. also praktischer wäre, wenn excel immer schaut, was schon da ist, und nur das, was seit dem letzten speichern dazugekommen ist, übernimmt.

folgendes szenario: ich habe eine im web zugängliche
txt-datei, die nach dem
muster

datenname1;datenname2;datenname3;…
datensatz1;datensatz2;datensatz3;…

aufgebaut ist und
mittels php immer wieder mit neuen zeilen beschrieben wird.

jetzt hätte ich gern folgendes: immer, wenn ich die
gespeicherte excel-datei aufmache, soll die tabelle auf den
momentanen stand der txt-datei aktualisiert werden,
idealerweise ohne daß die in excel vorgenommenen
layoutänderungen verlorengehen.

hat jemand zufällig eine ahnung, ob das, was ich gern hätte,
sich bewerkstelligen läßt, und wenn ja, wie?

Hi Gyuri,

das geht schon.

Lade dazu mal dort eine Txt-Datei mit so 10-20 Dummyzeilen hoch. Ein Datensatz war mir jetzt zu wenig für das Feature, daß nur neue Datensätze übernommen werden sollen.

Der vorliegende Code holt sich beim Start der Exceldatei alle Datensätze aus der Txt-Datei und schreibt sie in die Tabelle.
Ich weiß nicht wie groß die Textdatei wird, vielleicht ist er ja schnell genug, daß man das Feature gar nicht benötigt. Wenn doch, wie gesagt, größere Datei hochladen.

Alt+F11, Einfügen Modul, dorthinein diese Prozedur:

Option Explicit

Sub tt()
Dim sUrl As String, objIE As Object, Zeilen, Werte
Dim Z As Long, W As Integer, Zei As Long
Application.ScreenUpdating = False
sUrl = "http://www.tud.at/gyuri/kursanmeldung.txt"
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
 .Navigate sUrl
 Do While .Busy: DoEvents: Loop
 Zeilen = Split(objIE.Document.body.innertext, Chr(10))
End With
objIE.Quit
For Z = 0 To UBound(Zeilen)
 Werte = Split(Zeilen(Z), ";")
 Zei = Zei + 1
 For W = 0 To UBound(Werte)
 Cells(Zei, W + 1) = Werte(W)
 Next W
Next Z
Application.ScreenUpdating = True
End Sub

Links einen Doppelklick auf „DieseArbeitsmappe“, dorthinein diese Prozedur:

Private Sub Workbook_Open()
Call Einlesen
End Sub

Gruß
Reinhard

Internet Textdatei in Excel einlesen
Hi gyuri,

jetzt wird der Inhalt der Textdatei in der Tabelle unten angehängt. Der erste Datensatz im Text, die Titelzeile wird nicht übertragen.

in Modul1

Option Explicit

Sub Einlesen()
Dim sUrl As String, objIE As Object, Zeilen, Werte
Dim Z As Long, W As Integer, Zei As Long
Application.ScreenUpdating = False
sUrl = "http://www.tud.at/gyuri/kursanmeldung.txt"
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
 .Navigate sUrl
 Do While .Busy: DoEvents: Loop
 Zeilen = Split(objIE.Document.body.innertext, Chr(10))
End With
objIE.Quit
Zei = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
For Z = 1 To UBound(Zeilen)
 Werte = Split(Zeilen(Z), ";")
 Zei = Zei + 1
 For W = 0 To UBound(Werte)
 Cells(Zei, W + 1) = Werte(W)
 Next W
Next Z
Application.ScreenUpdating = True
End Sub

in DieseArbeitsmappe

Private Sub Workbook_Open()
Worksheets(„Tabelle1“).Activate
Call Einlesen
End Sub

Gruß
Reinhard

wow, danke!
danke schön!

Private Sub Workbook_Open()
Worksheets(„Tabelle1“).Activate
Call Einlesen
End Sub

da wurde die zweite zeile vom debugger markiert, die hab ich rausgelöscht. jetzt funktionierts.

jetzt wird bei jedem aufrufen der komplette datensatz (außer der ersten zeile) abgerufen, somit hab ich alte zeilen doppelt. kann man das vielleicht auch noch irgendwie lösen?

danke auf jeden fall, das hilft mir schon sehr viel weiter!

Hi Gyuri,

Private Sub Workbook_Open()
Worksheets(„Tabelle1“).Activate
Call Einlesen
End Sub

da wurde die zweite zeile vom debugger markiert, die hab ich
rausgelöscht. jetzt funktionierts.

Vielleicht hast du kein Blatt was „Tabelle1“ heißt.

jetzt wird bei jedem aufrufen der komplette datensatz (außer
der ersten zeile) abgerufen, somit hab ich alte zeilen
doppelt. kann man das vielleicht auch noch irgendwie lösen?

Da bräuchte ich genauere Informationen, ich ging davon aus einmal am Tag schreibt php die Datei neu und du startest Excel einmal.

Ich muß wissen in welcher Art und Weise sich die Daten der Textdatei verändern usw.

Gruß
Reinhard

1 „Gefällt mir“

Vielleicht hast du kein Blatt was „Tabelle1“ heißt.

stimmt, das blatt heißt (offenbar durch das ursprüngliche importieren der txt-datei) kursanmeldung. aber wie es aussieht, funktioniert es auch so.

Da bräuchte ich genauere Informationen, ich ging davon aus
einmal am Tag schreibt php die Datei neu und du startest Excel
einmal.

Ich muß wissen in welcher Art und Weise sich die Daten der
Textdatei verändern usw.

es kommen nur neue zeilen dazu, alles was drin war, bleibt auch drin (es sei denn, ich lösche etwas händisch raus, aber das kann ich dann auch händisch im excel rauslöschen).

es ist noch ein kleines problemchen aufgetaucht, an sich aber nix schlimmes, sprich wenn es dafür keine einfache lösung gibt, ist es egal. wenn die textdatei mehrere zeilen hat, übernimmt excel auch den zeilenwechsel als zeichen, da steht dann in der letzten spalte so ein kastl hinten dran. ist wie gesagt nicht schlimm…

Hi Gyuri,

Vielleicht hast du kein Blatt was „Tabelle1“ heißt.

stimmt, das blatt heißt (offenbar durch das ursprüngliche
importieren der txt-datei) kursanmeldung. aber wie es
aussieht, funktioniert es auch so.

Dann schreibe diesen Namen in den Code.

es kommen nur neue zeilen dazu, alles was drin war, bleibt
auch drin (es sei denn, ich lösche etwas händisch raus, aber
das kann ich dann auch händisch im excel rauslöschen).

Code entsprechend geändert.

es ist noch ein kleines problemchen aufgetaucht, an sich aber
nix schlimmes, sprich wenn es dafür keine einfache lösung
gibt, ist es egal. wenn die textdatei mehrere zeilen hat,
übernimmt excel auch den zeilenwechsel als zeichen, da steht
dann in der letzten spalte so ein kastl hinten dran. ist wie
gesagt nicht schlimm…

Code entsprechend geändert.

Option Explicit

Sub Einlesen()
Dim sUrl As String, objIE As Object, Zeilen, Werte
Dim Z As Long, W As Integer, Zei As Long
Application.ScreenUpdating = False
sUrl = "http://www.tud.at/gyuri/kursanmeldung.txt"
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
 .Navigate sUrl
 Do While .Busy: DoEvents: Loop
 Zeilen = Split(objIE.Document.body.innertext, Chr(10))
End With
objIE.Quit
Zei = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
For Z = Zei To UBound(Zeilen)
 Werte = Split(Zeilen(Z), ";")
 Zei = Zei + 1
 For W = 0 To UBound(Werte)
 Cells(Zei, W + 1) = Werte(W)
 Next W
 Cells(Zei, W) = Replace(Cells(Zei, W), Chr(13), "")
Next Z
ActiveSheet.UsedRange.Columns.AutoFit
Application.ScreenUpdating = True
End Sub

Gruß
Reinhard

2 „Gefällt mir“

perfekt, danke!
fettes merci und (*)!!!
lg, gyuri

owT klasse - stimme gyuri voll zu, Stern