CSV-Import
27.03.2024 11:08:43
Markus K.
ich möchte eine csv-Datei in ein Excel-Sheet importieren und grundsätzlich ist die Herangehensweise klar (zumindest funktioniert der Import schon mal).
Der Import soll täglich ausgeführt werden, das sich die csv-Datei täglich erweitert.
Ein kleiner Ausschnitt der csv-Datei:
Position Form Artmat image article variant
1 BEN 11-17101-01 1117101 11-17101 '01
2 BEN 11-17101-07 1117101 11-17101 '07
3 DINO 11-23301-12 1123301 11-23301 '12
4 DINO 11-23301-14 1123301 11-23301 '14
5 DINO 11-23302-12 1123302 11-23302 '12
6 DINO 11-23302-17 1123302 11-23302 '17
7 FINN 11-24304-01 1124304 11-24304 '01
Das tägliche Update der csv-Datei umfasst weitere Artikel und zugehörige Varianten, die dann natürlich beim Einlesen einsortiert werden sollen.
Ich hätte jetzt im Excel-Sheet jetzt gerne folgende Liste nach dem Import:
In Spalte 1 sollen die Artikel (11-17101 usw.) untereinander stehen und jeweils unter dem Artikel die Varianten (01, 07 usw.) dazu.
11-17101
01
07
11-23301
12
14
11-23302
12
17
11-24304
01
usw...
Ich habe wie gesagt den Import soweit, dass mir die Auflistung wie oben gezeigt angelegt wird, allerdings nicht mit den kurzen Varianten-Nummern unter dem jeweiligen Artikel, sondern in der langen Version, also so:
11-17101-01
11-17101-07
11-23301-12
11-23301-14
11-23302-12
11-23302-17
11-24304-01
Ein Lösungsansatz, wie ich zum gewünschten Ergebnis komme, wäre schön, eventuell müsste ich meinen Code auch nur geringfügig ändern.
Sub import_new_csv()
Dim zeilen As String, stext() As String, form As String, variante As String, temp_artikel As String, artmat As String, check_artikel As String
Dim i As Integer, index_form As Integer, index_article As Integer, index_artmat As Integer, index_variant As Integer, next_row As Integer, nächster As Integer
pfad_artikelliste = ThisWorkbook.Path
name_artikelliste = ThisWorkbook.Name
Actual_File_Name = ActiveWorkbook.Name
pfad_csv = "C:\Dokumente\CSV\"
name_csv = "N0107619_ara_Fotobuch_Daten_Export.csv"
check_artikel = "check"
' Datei für Import öffnen
Open pfad_csv & name_csv For Input As #1
While Not EOF(1)
Line Input #1, zeilen
' erste Zeile
If Left(zeilen, 8) = "Position" Then
stext = Split(zeilen, ";")
For i = LBound(stext) To UBound(stext)
' Index für Form
If stext(i) = "Form" Then
index_form = i
End If
' Index für Artikel
If stext(i) = "article" Then
index_article = i
End If
' Index für Variante
If stext(i) = "variant" Then
index_variant = i
End If
' Index für Artmat
If stext(i) = "Artmat" Then
index_artmat = i
End If
Next i
End If
' alle weiteren Zeilen mit Daten
If Left(zeilen, 8) > "Position" Then
stext = Split(zeilen, ";")
temp_artikel = Replace(stext(index_article), """", "")
form = Replace(stext(index_form), """", "")
variante = Replace(stext(index_variant), """", "")
artmat = Replace(stext(index_artmat), """", "")
End If
Application.Windows(Actual_File_Name).Activate
next_row = 5
'Set finden = Cells.Find(what:=temp_artikel, after:=ActiveCell, LookIn:=xlFormulas, lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
Set finden = Cells.Find(what:=artmat, after:=ActiveCell, LookIn:=xlFormulas, lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
If finden Is Nothing Then
nächster = 5
'Do While Tabelle1.Cells(nächster, 1) temp_artikel
Do While Tabelle1.Cells(nächster, 1) artmat
If Tabelle1.Cells(nächster, 1) = "" Then
Exit Do
End If
nächster = nächster + 1
Loop
Cells(nächster, 1).Activate
Tabelle1.Rows(nächster).Insert
'Range("A" & nächster).Value = temp_artikel
Range("A" & nächster).Value = artmat
If check_artikel > temp_artikel And check_artikel > "check" Then
' Rahmen
Range("A" & nächster, "L" & nächster).Borders(xlEdgeTop).LineStyle = xlContinuous
' With Selection.Borders(xlEdgeTop)
' .LineStyle = xlContinuous
' .ColorIndex = xlAutomatic
' .TintAndShade = 0
' .Weight = xlThin
' End With
End If
Else
nächster = 5
End If
If temp_artikel > "" Then
check_artikel = temp_artikel
End If
Wend
Close #1
Tabelle1.Range("date_last_import").Value = DateTime.Date
End Sub
Vielen Dank schonmal füe Eure Hilfe.
Grüße