ich befasse mich nun schon seit längerem mit dem automatischen Einlesen von EEG-Daten, die von den Energieversorgungsunternehmen veröffentlicht werden. (Alle Daten sind also vollkommen öffentlich zugänglich, nichts geheimes hier).
Leider habe ich folgende Fehler noch nicht beheben können. Ein Wert eines jeden Datensatzes beschreibt die installierte Kraftwerksleistung, ist also ein positiver numerischer Wert. Der macht mir Probleme:
Ich habe hier mal vier Rohdatensätze zur Illustration dabei:
Stadtwerke Elmshorn ;"E20148010000000000000003440300001";"25371";2001;§11 Solar;1,900;Keine Angabe;Keine Angabe;Spannungsebene 07 (NS)
Stadtwerke Elmshorn ;"E20148010000000000000003532800001";"25337";2001;§11 Solar;2,160;Keine Angabe;Keine Angabe;Spannungsebene 07 (NS)
Stadtwerke Elmshorn ;"E20148010000000000000003558600001";"25337";2001;§11 Solar;0,850;Keine Angabe;Keine Angabe;Spannungsebene 07 (NS)
Stadtwerke Elmshorn ;"E20148010000000000000006005100001";"25335";2001;§10 Wind;3.000,000;Keine Angabe;Keine Angabe;Spannungsebene 07 (NS)
Nach dem Einlesen bekomme ich folgendes Ergebnis (nur auf die Zahlenwerte achten):
Stadtwerke Elmshorn "E20148010000000000000003440300001" "25371" 2001 §11 Solar 1.900 Keine Angabe Keine Angabe Spannungsebene 07 (NS)
Stadtwerke Elmshorn "E20148010000000000000003532800001" "25337" 2001 §11 Solar 2.160 Keine Angabe Keine Angabe Spannungsebene 07 (NS)
Stadtwerke Elmshorn "E20148010000000000000003558600001" "25337" 2001 §11 Solar 0,850 Keine Angabe Keine Angabe Spannungsebene 07 (NS)
Stadtwerke Elmshorn "E20148010000000000000006005100001" "25335" 2001 §10 Wind 3.000.000 Keine Angabe Keine Angabe Spannungsebene 07 (NS)
Sprich: die Werte Das hat doch irgendwas mit den englischen Formaten zu tun oder?
Meine Einleseprozedur geht wie folgt (hab schon super viel rumgebastelt - Punkt löschen und "0," entfernen - aber trete auf der Stelle), ich hoffe sie ist einigermaßen verständlich.
Function ImportCSV(sDateix As String, sPfadx As String, intCx As Integer)
Dim Arr
Dim Datei
Dim FSO
Dim L As Long
Dim YY As Long
Dim ZZ As Long
Dim Halter As String
Dim Tmp As Variant
Dim vnt_Ausgabe As Variant
Dim I As Integer
Dim Wbk As Workbook
Set FSO = CreateObject("Scripting.FilesystemObject")
'MsgBox sDateix & sPfadx
Set Datei = FSO.OpentextFile(sPfadx & sDateix)
Arr = Split(Datei.readall, vbCrLf) 'Nach Datensätzen splitten wobei vbCrLf bedeutet nichts _
anderes bedeutet,
'als dass der Cursor an den Anfang einer neuen Zeile _
gesetzt wird
Datei.Close
ReDim vnt_Ausgabe(UBound(Arr), 10) '10 Spalten müssten genügen
'For YY = 0 To 800
YY = 0
ZZ = 0
For L = 0 To UBound(Arr)
Tmp = Split(Arr(L), ";") 'Jeden Datensatz nach Werten splitten und in den tempöraren Array _
packen
For I = 0 To UBound(Tmp)
Halter = Tmp(I)
If InStr(1, Tmp(I), ".") Then 'Falls ein Punkt im Datensatz vorkommt
If IsNumeric(Left(Halter, 1)) Then 'Nur Punkt löschen, wenn das erste Zeichen des _
Strings numerisch ist
ZeichenEntf Halter, "." 'Diesen über hilfsvar = Halter entfernen
Tmp(I) = Halter
YY = YY + 1
End If
End If
If (Left(Halter, 1) = "0") Then
If (Right(Left(Halter, 2), 1) = ",") Then 'Falls der Datensatz mit "0," anfängt
Halter = Right(Halter, Len(Halter) - 1) '0 abschneiden
ZeichenEntf Halter, "," 'Komma entfernen
ZZ = ZZ + 1
End If
End If
vnt_Ausgabe(L, I) = Tmp(I) 'jeden Wert (temporären Array) in das Array vnt_Ausgabe _
umschaufeln
Next
Next
Debug.Print "Es wurde folgende Anzahl an Datensätzen verändert (Punkt gelöscht): " & YY
Debug.Print "Es wurde folgende Anzahl an Datensätzen verändert (0, gelöscht): " & ZZ
Set Wbk = Workbooks.Add
Application.DisplayAlerts = False
Range("A1").Resize(UBound(vnt_Ausgabe) + 1, UBound(vnt_Ausgabe, 2)) = vnt_Ausgabe 'Alles ab A1 _
reinschreiben
Wbk.SaveAs Filename:=sPfadx & Left(sDateix, Len(sDateix) - 3) & "xls"
'MsgBox "saved as " & sPfadx & Left(sDateix, Len(sDateix) - 3) & "xls"
Wbk.Close
Application.DisplayAlerts = True
ImportCSV = False
End Function
Ich bin um jeden Tipp dankbar...
LG ISILAN