Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

XML Daten in Excel schreiben

Forumthread: XML Daten in Excel schreiben

XML Daten in Excel schreiben
09.12.2016 09:13:54
chris58
Hallo !
Ich ersuche um Hilfe folgendes Problems.
Ich lese mit einer EnergyCam Daten von einem Zähler. Der meldet mir, fallweise, wenn ich eine Verbindung herstelle und schreibt diese fotlaufend in eine Datei, wobei die neueste immer zuoberst steht.
Ich will nun diese Daten in eine Excelliste bringen und zwar folgendermassen.
sollte die Anordnung sein:
Date.......Reading.......ReadingVal
Das neuere Datum sollte im zuoberst stehen, beginnen mit A2/B2/ C2
Danke für die Hilfe, aber ich habe nichts für meine Zwecke, bei der Recherche gefunden.
chris
Hier habe ich ein Bild von der XML-Datei gemacht, da ich die nicht raufladen kann.
Userbild
Anzeige

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: XML Daten in Excel schreiben
09.12.2016 16:48:53
KlausF
Hallo Chris,
ist ohne Ansicht des Originaltextes nicht ganz so einfach.
Kopiere den XML-Text nach Spalte A und lass das Makro laufen.
Falls sich der Text in mehrere Spalten aufteilt, dann lösche die vorderen
Spalten, so dass die "Date"-Zeile in Spalte A zu stehen kommen:
https://www.herber.de/bbs/user/109958.xls
Gruß
Klaus
Anzeige
AW: XML Daten in Excel schreiben
09.12.2016 19:02:46
chris58
Hallo !
Ja, das geht mit so, aber mit dem Bild.
In der Zwischenzeit habe ich aber noch einige Daten auf die EC0.xml Datei runtergeladen.
Ich habe das Bild hier reingestellt, da ich die .xml Datei hier nicht raufladen kann.
Wie bekomme ich nun die neuen Daten da rein ?
chris
AW: XML Daten in Excel schreiben
09.12.2016 19:32:20
KlausF
Hallo Chris,
wenn ich Dich richtig verstanden habe willst Du ständig neue
Daten zu den Vorhandenen dazu geben? Dann so:
https://www.herber.de/bbs/user/109960.xls
Benutze das Eingabeblatt immer für die neuen Daten.
Im Blatt Ergebnis wird dazu geschrieben.
Gruß
Klaus
Anzeige
AW: XML Daten in Excel schreiben
09.12.2016 19:53:11
chris58
Hallo Klaus !
Ich habe mich den ganzen Nachmittag gespielt und diese Datei bzw. das Makro mit dem Rekorder aufgenommen.
So sollte das aussehen, jedoch sollte es nicht in eine neue Datei gespeichert werden, sondern in der gleichen Datei in einem neuen Tabellenblatt.....Name z.B. wie in deiner "Ergebnis".
Auch sollte noch die Möglichkeit gegeben sein, das ich den Ort, von wo ich die .xml Datei reinspeichere, auswählbar sein. Meine das nur, wen die .xml Datei woanders abgespeichert werden sollte.
Gruß chris
https://www.herber.de/bbs/user/109961.xls
Anzeige
kann nicht weiter helfen
09.12.2016 21:00:35
KlausF
Hallo Chris,
da muss Dir jemand anderes weiter helfen. Ich habe einen Mac und
kann da bestimmte Dinge für Windows nicht testen.
Ich stelle mal auf offen.
Gruß
Klaus
Hochgeladen bei Datein
10.12.2016 08:13:04
chris58
Hallo !
Ich habe beide Dateien in einer ZIP-Datei hochgeladen um es zu verdeutlichen.
Die .xml Datei wird immer wieder mit neuen Daten versorgt, jedesmal wenn ich mit der EnergyCam den Zählerstand abfrage. Diese Daten sollen dann in eine Excel Datei, auch die neuen Abfrage, in ein neues Tabellenblatt ......z.B. "Ergebnis" aufgelistet werden.
chris
https://www.herber.de/bbs/user/109964.zip
Anzeige
AW: Hochgeladen bei Datein
11.12.2016 15:42:16
Michael
Hi,
das mit der Dateiauswahl ist machbar; allerdings würde ich als Basis den Code von Klaus erweitern wollen.
Ich finde das Kopieren in verschiedene Tabellenblätter allerdings ungünstig, weil dann keine Art von "direkter Auswertung" möglich wäre: wenn alles in EINER Tabelle gespeichert wird, lassen sich die Daten nach Bedarf rauf und runtersortieren, filtern usw. und vielleicht auch mal ein Diagramm mit dem zeitlichen Verlauf erstellen.
Weiterhin ist die Spalte "Reading" völlig überflüssig, weil sie nur einen auf eine Nachkommastelle gerundeten Wert von "ReadingVal" enthält - eine der beiden reicht. Dafür würde ich allerdings Datum und Zeit in getrennte Spalten setzen.
Falls durch so ein Vorgehen doppelte Werte entstehen sollten, lassen die sich ja mit einem Handgriff entfernen.
Willst Du das?
Schöne Grüße,
Michael
Anzeige
AW: Hochgeladen bei Datein
11.12.2016 19:59:53
chris58
Hallo Michael !
Ja, sicher. Ich will auf der .xls Datei in einem zweiten Tabellenblatt "Ergebnis" die Daten haben. Das Datum und die Zeit soll getrennt sein. Nur, ich weiß nicht, wie ich das bewerkstelligen kann.
Gruß chris
AW: Hochgeladen bei Datein
12.12.2016 17:35:34
Michael
Hi Chris,
dann versuch's mal damit: https://www.herber.de/bbs/user/110002.xls
Schöne Grüße,
Michael
Anzeige
AW: Hochgeladen bei Datein
13.12.2016 10:16:35
chris58
Hallo Michael !
Das geht fast perfekt. Nur eines noch, dann wäre ich glücklich. Wenn ich auf den Button "Import" klicke, dann holt er die Daten. Nur: er schreibt mir dann alle wieder rein. die Daten sollten dann allerdings überschrieben werden, da die .xml Datei weiter auflistet und auch immer wieder die alten Daten mit drauf sind. Also jedesmal bei dem Import sollten die Daten, die im Ergebnis stehen, überschrieben werden, sonst stehen zwar die neuen da mit drauf, nur doppelt und dreifach...........fünfach usw.
kannst mir bitte das noch sagen.
Danke
chris
Anzeige
kein Thema
13.12.2016 16:00:16
Michael
Hi Chris,
für das Entfernen von Doppelten hat Excel ja einen Befehl, der unten im ersten Sub steht; Du kannst im "Ergebnis" ja einen Button dafür anlegen damit verknüpfen und / oder die Sub direkt aufrufen (siehe ganz unten bei der MsgBox):
Option Explicit
Sub Doppelte_Raus()
Sheets("Ergebnis").Range("A1").CurrentRegion.RemoveDuplicates _
Columns:=Array(1, 2), Header:=xlYes
End Sub
Sub DateiName()
Dim filetoopen As Variant
Dim pfad As String, Ext As String
Dim p&, shMaster&, j&
Dim blaetter$()
pfad = Master.Range("C4").Value
Ext = Master.Range("B3").Value
If pfad = "" Then pfad = ActiveWorkbook.Path
If Dir(pfad & "\*.*") = "" Then pfad = ActiveWorkbook.Path
ChDrive Mid(pfad, 1, 2)
ChDir pfad
filetoopen = Application.GetOpenFilename("Datein als *." & Ext & ", *" & Ext)
If filetoopen  False Then
Master.Range("c5").Value = filetoopen
p = InStrRev(filetoopen, "\")
If p > 2 Then Master.Range("c4").Value = Left(filetoopen, p - 1)
Else
Master.Range("C5").Value = "nichts ausgewählt"
End If
Master.Range("C7").Value = ActiveWorkbook.FullName
End Sub
Sub TextLesenUndSchreiben(Blatt$, Datei$, Zeile&, Splitten$)
Dim DNr As Integer, p&, p0&
Dim sIn As String, aIn, aOut()
Dim iIn&, iOut&
DNr = FreeFile
Open Datei For Input As #DNr
sIn = Input(LOF(DNr), DNr)
Close #DNr
aIn = Split(sIn, Splitten) ' #13,#10 oder was auch immer
sIn = "" ' vielleicht?
If UBound(aIn) >= 0 Then
ReDim aOut(1 To UBound(aIn), 1 To 3)
For iIn = 1 To UBound(aIn)  ' das 0. wird verworfen
p = InStr(aIn(iIn), " ")
iOut = iOut + 1
If p = 0 Then
aOut(iOut, 1) = "Fehler"
Else
aOut(iOut, 1) = Mid$(aIn(iIn), 1, p - 1)
p0 = InStr(p, aIn(iIn), "")
If p0 = 0 Then
aOut(iOut, 2) = "Fehler"
Else
aOut(iOut, 2) = Mid$(aIn(iIn), p + 1, p0 - p - 1)
p = InStr(p0, aIn(iIn), "ing>")
If p = 0 Then
aOut(iOut, 3) = "Fehler"
Else
p = p + 4
p0 = InStr(p, aIn(iIn), "")
If p0 > p Then
aOut(iOut, 3) = Mid$(aIn(iIn), p + 1, p0 - p)
aOut(iOut, 3) = Val(Replace(aOut(iOut, 3), "-", ""))
End If
End If
End If
End If
Next
Sheets(Blatt).Range("A" & Zeile).Resize(iOut, 3) = aOut
End If
End Sub
Sub Aufruf()
Dim shName$, DateiName$
Dim z&
Dim t0 As Single
shName = "Ergebnis"
DateiName = Master.Range("C5").Value
If DateiName = "nichts ausgewählt" Or Dir(DateiName) = "" Then
MsgBox "Fehler bei Datei " & DateiName: Exit Sub
End If
z = Sheets(shName).Range("C" & Rows.Count).End(xlUp).Row + 1
t0 = Timer
Call TextLesenUndSchreiben(shName, DateiName, z, "")
If MsgBox("Eingelesen in " & Timer - t0 & " Sekunden" & vbLf & _
"Doppelte gleich entfernen?", vbYesNo) = vbYes Then Doppelte_Raus
End Sub

Man hätte natürlich auch zunächst das Blatt leeren können, aber Du wolltest ja verschiedene XMLs importieren - die ja vielleicht dann doch nicht ALLE Daten enthalten...
Schöne Grüße,
Michael
Anzeige
AW: kein Thema
13.12.2016 17:59:07
chris58
Hallo Michael !
Bei der Zeile kommt ein Fehler.
Was soll ich ändern -
chris
Option Explicit
Sub Doppelte_Raus()
Sheets("Ergebnis").Range("A1").CurrentRegion.RemoveDuplicates _
Columns:=Array(1, 2), Header:=xlYes
End Sub

Sub DateiName()
Dim filetoopen As Variant
Dim pfad As String, Ext As String
Dim p&, shMaster&, j&
Dim blaetter$()
pfad = Master.Range("C4").Value
Ext = Master.Range("B3").Value
If pfad = "" Then pfad = ActiveWorkbook.Path
If Dir(pfad & "\*.*") = "" Then pfad = ActiveWorkbook.Path
ChDrive Mid(pfad, 1, 2)
ChDir pfad
filetoopen = Application.GetOpenFilename("Datein als *." & Ext & ", *" & Ext)
If filetoopen  False Then
Master.Range("c5").Value = filetoopen
p = InStrRev(filetoopen, "\")
If p > 2 Then Master.Range("c4").Value = Left(filetoopen, p - 1)
Else
Master.Range("C5").Value = "nichts ausgewählt"
End If
Master.Range("C7").Value = ActiveWorkbook.FullName
End Sub

Sub TextLesenUndSchreiben(Blatt$, Datei$, Zeile&, Splitten$)
Dim DNr As Integer, p&, p0&
Dim sIn As String, aIn, aOut()
Dim iIn&, iOut&
DNr = FreeFile
Open Datei For Input As #DNr
sIn = Input(LOF(DNr), DNr)
Close #DNr
aIn = Split(sIn, Splitten) ' #13,#10 oder was auch immer
sIn = "" ' vielleicht?
If UBound(aIn) >= 0 Then
ReDim aOut(1 To UBound(aIn), 1 To 3)
For iIn = 1 To UBound(aIn)  ' das 0. wird verworfen
p = InStr(aIn(iIn), " ")
iOut = iOut + 1
If p = 0 Then
aOut(iOut, 1) = "Fehler"
Else
aOut(iOut, 1) = Mid$(aIn(iIn), 1, p - 1)
p0 = InStr(p, aIn(iIn), "")
If p = 0 Then
aOut(iOut, 3) = "Fehler"
Else
p = p + 4
p0 = InStr(p, aIn(iIn), " p Then
aOut(iOut, 3) = Mid$(aIn(iIn), p + 1, p0 - p)
aOut(iOut, 3) = Val(Replace(aOut(iOut, 3), "-", ""))
End If
End If
End If
End If
Next
Sheets(Blatt).Range("A" & Zeile).Resize(iOut, 3) = aOut
End If
End Sub

Sub Aufruf()
Dim shName$, DateiName$
Dim z&
Dim t0 As Single
shName = "Ergebnis"
DateiName = Master.Range("C5").Value
If DateiName = "nichts ausgewählt" Or Dir(DateiName) = "" Then
MsgBox "Fehler bei Datei " & DateiName: Exit Sub
End If
z = Sheets(shName).Range("C" & Rows.Count).End(xlUp).Row + 1
t0 = Timer
Call TextLesenUndSchreiben(shName, DateiName, z, "")
If MsgBox("Eingelesen in " & Timer - t0 & " Sekunden" & vbLf & _
"Doppelte gleich entfernen?", vbYesNo) = vbYes Then Doppelte_Raus
End Sub

Anzeige
AW: ach, die größer und kleiner-Zeichen...
14.12.2016 12:45:33
chris58
Hallo Michael !
Ja leider funktioniert das ganze noch immer nicht. Wenn ich die Datei starte, dann kommt bei dem Code
Sub Doppelte_Raus()
Sheets("Ergebnis").Range("A1").CurrentRegion.RemoveDuplicates _
Columns:=Array(1, 2), Header:=xlYes
End Sub
der Fehler.
chris
Anzeige
AW: ach, die größer und kleiner-Zeichen...
15.12.2016 11:35:20
chris58
Hallo Michael !
Ich habe die Datei nun, glaub ich halt, fertig. Ich wollte diese hier hochladen, doch es geht einfach nicht. Nicht als .xls noch als .zip Datei. Wollte eigentlich noch fragen, ob es ein VBA Script gibt (ich habe keines gefunden, das das könnte), welches nur einen Tag (Datum) in der Zeit von 08:00 - 12:00, alle anderen aus der Liste löscht.
Danke jedenfalls für Deine Hilfe.....ich bin jedenfalls begeistert.
chris
Anzeige
Datei hochladen
15.12.2016 15:29:21
Michael
Hi Chris,
das kann auch an Umlauten/Leerzeichen o.ä. im Dateinamen liegen: mach die mal raus, dann sollte es gehen.
Anbei die Variante mit 8-12: https://www.herber.de/bbs/user/110057.xls
Gruß,
Michael
AW: ach, die größer und kleiner-Zeichen...
15.12.2016 11:39:13
Michael
Hi Chris,
in Deinem vorhergehenden Post war aber eine andere Zeile markiert, mitten im Sub TextLesenUndSchreiben...
Das Doppelte_Raus benötigst Du ja nur, um Doppelte zu entfernen. Bei mir geht es...
Kommentiere den Aufruf halt mal in der untersten Zeile von Sub Aufruf aus:
...
' If MsgBox("Eingelesen in " & Timer - t0 & " Sekunden" & vbLf & _
'      "Doppelte gleich entfernen?", vbYesNo) = vbYes Then Doppelte_Raus

Funktioniert der Rest dann?
Schließlich kannst Du das Entfernen der Doppelten zur Not auch mal händisch machen (muß ja vielleicht nicht bei jedem Import sein), übers Menü, und/oder evtl. mit dem Makrorekorder noch einmal aufzeichnen.
Gruß,
Michael
Anzeige
AW: ach, die größer und kleiner-Zeichen...
15.12.2016 15:24:37
chris58
Hallo Michael !
Ich habe nun alles umgestellt. Funktioniert jedoch auch nicht....zumindest nicht bei mir.
Ich würde dir die Datei gerne zeigen, kann sie allerdings noch immer nicht hochladen........warum ist mir ein Rätsel.
Danke jedenfalls.....
Ich habe das ganze mit zusammengewörfelten Codes gemacht, wobei Dein erster Code das Herzstück ist. Was mir noch fehlt, ist eben die Doppelten raus. Aber damit muß ich halt leben. Ich habe zwar einen Code gefunden, der geht, nur ich will das der die doppelten entfernt und nur jeweils ein Tag lt. Datum und das nur zwischen 7:00 bis 12:00 drinnen stehen läßt.
Ich werde einen neuen Tread aufmachen, für diesen einen Code. Jedenfalls nochmals danke für deine Hilfe.
chris
Hier dieser Code:
Sub DuplikateLoeschen()
Dim i&
Application.ScreenUpdating = False
For i = Cells(Rows.Count, "A").End(xlUp).Row To 1 Step -1
If Application.CountIf(Range(Cells(14, "A"), Cells(i, "A")), Cells(i, "A")) > 1 Then
Cells(i, "A").EntireRow.Delete
End If
Next
Application.ScreenUpdating = True
End Sub

Anzeige
ok, gerne. Schöne Grüße & owT
15.12.2016 18:28:00
Michael
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige