Bestimmte Werte aus CSV Datei automatisch in HTML Datei einfügen
Guten Abend liebe Leute!
Ich bin neu hier im Forum und hoffe, dass mir trotzdem jemand helfen kann.
Leider habe ich von VBA bisher keine Ahnung.
Ich würde gerne mittels Excel/Calc aus CSV Dateien einzelne Werte in eine existierende HTML Datei schreiben lassen. Natürlich an eine bestimmte Stelle.
Die CSV Datei ist folgendermaßen aufgebaut:
Page,Device,Group,ItemID,Item,Value
Seite1,Gerät1,Gruppe1,257,Name1,Wert1
Seite2,Gerät2,Gruppe2,266,Name2,Wert2
Die HTML Datei ist so aufgebaut
<tbody>
<tr>
<td style="width: 381px;">#Name1</td>
<td style="width: 464px;">#Wert1<br>
</td>
</tr>
<tr>
<td style="width: 381px;">#Name2</td>
<td style="width: 464px;">#Wert2<br>
</td>
</tr>
Eingesetzt werden sollen NameX und WertX bei (und anstatt) #NameX und #WertX.
Die Auswahl was übertragen wird und was nicht, soll anhand der ItemID erfolgen (Es sind viele für mich uninteressante Daten darunter).
Im Grunde reicht mir auch Anhand der ItemID der jeweilige WertX, die #Name könnte ich auch fix in die HTML Datei schreiben, da diese fast immer gleich sind.
Da manchmal bestimmte ItemIDs vorhanden sind und manchmal auch nicht, wäre es natürlich besser NameX und WertX zu übertragen.
Schon im Vorraus vielen vielen Dank für eure Hilfe.
Viele Grüße
André
Ich bin neu hier im Forum und hoffe, dass mir trotzdem jemand helfen kann.
Leider habe ich von VBA bisher keine Ahnung.
Ich würde gerne mittels Excel/Calc aus CSV Dateien einzelne Werte in eine existierende HTML Datei schreiben lassen. Natürlich an eine bestimmte Stelle.
Die CSV Datei ist folgendermaßen aufgebaut:
Page,Device,Group,ItemID,Item,Value
Seite1,Gerät1,Gruppe1,257,Name1,Wert1
Seite2,Gerät2,Gruppe2,266,Name2,Wert2
Die HTML Datei ist so aufgebaut
<tbody>
<tr>
<td style="width: 381px;">#Name1</td>
<td style="width: 464px;">#Wert1<br>
</td>
</tr>
<tr>
<td style="width: 381px;">#Name2</td>
<td style="width: 464px;">#Wert2<br>
</td>
</tr>
Eingesetzt werden sollen NameX und WertX bei (und anstatt) #NameX und #WertX.
Die Auswahl was übertragen wird und was nicht, soll anhand der ItemID erfolgen (Es sind viele für mich uninteressante Daten darunter).
Im Grunde reicht mir auch Anhand der ItemID der jeweilige WertX, die #Name könnte ich auch fix in die HTML Datei schreiben, da diese fast immer gleich sind.
Da manchmal bestimmte ItemIDs vorhanden sind und manchmal auch nicht, wäre es natürlich besser NameX und WertX zu übertragen.
Schon im Vorraus vielen vielen Dank für eure Hilfe.
Viele Grüße
André
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 260936
Url: https://administrator.de/contentid/260936
Ausgedruckt am: 25.11.2024 um 19:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo Andrè,
generiere dir doch dein HTML-File anhand der CSV-Datei dann musst du nicht immer die Platzhalter ersetzen und bis wesentlich flexibler.
Hier ein Beispiel mit Powershell:
Der Code lädt deine CSV-Datei erstellt anhand der Zeilen in der CSV-Datei jeweils eine HTML-Zeile speichert die Zeilen in einer Variablen und fügt diese Variable dann in ein HTML-Template ein. Das ganze dann als HTML ausgegeben, fertig.
Was du aus der CSV-Datei in die HTML-Datei übernehmen willst lässt sich ganz einfach mit Powershell ausfiltern da die CSV-Datei in Powershell als Objekt gehandhabt wird, da ist ein Filtern nach ItemID sehr leicht.
Das ganze lässt sich natürlich auch mit VBA abbilden wenn du willst
Grüße Uwe
generiere dir doch dein HTML-File anhand der CSV-Datei dann musst du nicht immer die Platzhalter ersetzen und bis wesentlich flexibler.
Hier ein Beispiel mit Powershell:
Der Code lädt deine CSV-Datei erstellt anhand der Zeilen in der CSV-Datei jeweils eine HTML-Zeile speichert die Zeilen in einer Variablen und fügt diese Variable dann in ein HTML-Template ein. Das ganze dann als HTML ausgegeben, fertig.
Was du aus der CSV-Datei in die HTML-Datei übernehmen willst lässt sich ganz einfach mit Powershell ausfiltern da die CSV-Datei in Powershell als Objekt gehandhabt wird, da ist ein Filtern nach ItemID sehr leicht.
# Pfad zur CSV Datei
$FILECSV = "C:\temp\test.csv"
# Ausgabepfad für HTML-File
$FILEHTMLOUT = "C:\temp\test_html.html"
#CSV-Datei importieren
$csv = Import-csv $FILECSV -Delimiter ","
$tablerows = @()
# Für jede Zeile in der CSV-Datei eine HTML-Zeile erstellen
$csv | %{
$tablerows += @"
<tr>
<td style="width: 381px;">$($_.Item)</td>
<td style="width: 464px;">$($_.Value)<br>
</td>
</tr>
"@
}
# HTML Template mit erzeugten Zeilen erstellen
$htmltemplate = @"
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>HTML Template</title>
</head>
<body>
<table border="1" width="">
$tablerows
</table>
</body>
</html>
"@
# HTML in Datei ausgeben
$htmltemplate | set-content $FILEHTMLOUT
Grüße Uwe
Zitat von @Salektro:
vielen Dank für deine Hilfe., das sieht schonmal ganz brauchbar aus. Ich muss jetzt nur noch schauen, wie ich Powershell Skripte unter Linux zum Laufen bekomme,
öhm das wäre ganz gut gewesen das zu erwähnen wie soll man das aus der Kategorie VBA herauslesen können ? ... ja nee so ein Umweg würde ich hier nicht gehen. dann schon direkt ein Bash-Script ...vielen Dank für deine Hilfe., das sieht schonmal ganz brauchbar aus. Ich muss jetzt nur noch schauen, wie ich Powershell Skripte unter Linux zum Laufen bekomme,
Hast Du noch einen Tip für mich, wie das mit dem Filtern funktioniert? So bekomme ich ja eine HTML Datei mit allen Werten, was ich ja gerade vermeiden wollte.
Das Filtern in Powershell funktioniert so:$csv | ?{$_.ItemID -eq '257'} | %{
#.......
}
$csv | ?{$_.ItemID -like '25*'} | %{
#.......
}
$csv | ?{$_.ItemID -match '^25[0-9]$'} | %{
#.......
}
sonst muss ich das in meinem Virtualbox Windows XP machen. Damit könnte ich aber leben.
Unter XP musst du dann aber Powershell nachinstallieren.Wie oben geschrieben würde ich das im Fall von Linux dann mit einem Bash-Script machen.
Grüße Uwe
Zitat von @Salektro:
Hättest Du auch noch einen Hinweis wie ich das mit einem Bash Skript mache?
Grundsätzlich kenne ich mich in Linux besser aus und komme da denke ich auch besser rein.
auf die Schnelle etwa so:Hättest Du auch noch einen Hinweis wie ich das mit einem Bash Skript mache?
Grundsätzlich kenne ich mich in Linux besser aus und komme da denke ich auch besser rein.
#!/bin/bash
FILECSV="./daten.csv"
FILEOUT="./daten.html"
for line in $(tail $FILECSV -n +2) ; do
itemID=$(echo $line | cut -d "," -f4)
item=$(echo $line | cut -d "," -f5)
value=$(echo $line | cut -d "," -f6)
rows="${rows}<tr>
<td style=\"width: 381px;\">${item}</td>
<td style=\"width: 464px;\">${value}</td>
</tr>
"
done
echo "
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">
<title>HTML Template</title>
</head>
<body>
<table border=\"1\">
$rows
</table>
</body>
</html>
" >$FILEOUT