salektro
Goto Top

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é

Content-Key: 260936

Url: https://administrator.de/contentid/260936

Printed on: April 24, 2024 at 12:04 o'clock

Member: wiesi200
wiesi200 Jan 23, 2015 at 17:01:57 (UTC)
Goto Top
Hallo,

Kommt ein bisschen auf deine Umgebung an, aber ich würde das über PHP realisieren und die Webseite dynamisch aufbauen.
Member: Salektro
Salektro Jan 23, 2015 at 17:23:03 (UTC)
Goto Top
PHP kann ich leider auch nicht. Aber ich weiß auch nicht ob das so sinnvoll ist.
Ich habe das ja sehr abstrakt geschildert. Ich will aus einem Aida64 Systemprotokoll (CSV Format), jene Daten die ich will (also z.B. Angaben zum Arbeitsspeicher, aber nicht die MAC Adresse der Netzwerkkarte) in eine HTML Datei Schreiben lassen.* Den HTML Code dieser Tabelle kopiere ich dann wieder in eine CSV Datei, welche ich dann in unseren Online Shop importieren kann. Die fehlenden Informationen muss ich dann natürlich händisch ergänzen, aber da führt ohnehin kein Weg daran vorbei.
Die Tabelle ist dann die ausführliche Beschreibung (wird in eine Designvorlage eingesetzt).

Wenn Du, oder jemand anderes eine bessere Idee haben wie das umzusetzen ist, bin ich da natürlich offen.

*Ich dachte an eine vorhandene HTML Datei, weil ich dann die Formatierung evtl. leichter vornehmen kann. Ansonsten müsste man das natürlich in dem Skript machen. Aber ist vielleicht auch kein Problem. Müsste auch nicht unbedingt eine Tabelle sein.
Member: wiesi200
wiesi200 Jan 23, 2015 at 17:48:06 (UTC)
Goto Top
Gut PHP ist da nicht die beste Lösung.
Persönlich würd ich dann eher versuchen das direkt abzubilden.

Sprich direkt eine CSV Datei zu erstellen mit denen der Webshop was anfangen kann.
Aber da müsste man die Umgebung etwas besser kennen.
Member: colinardo
colinardo Jan 23, 2015 updated at 18:11:42 (UTC)
Goto Top
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.
# 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
Das ganze lässt sich natürlich auch mit VBA abbilden wenn du willst
Grüße Uwe
Member: Salektro
Salektro Jan 24, 2015 at 13:24:53 (UTC)
Goto Top
Hallo Uwe,
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,
sonst muss ich das in meinem Virtualbox Windows XP machen. Damit könnte ich aber leben.

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.

Gruß
André
Member: Salektro
Salektro Jan 24, 2015 at 13:29:21 (UTC)
Goto Top
Hallo,
das wäre zwar in der Tat wünschenswert, funktioniert aber so leider nicht.
Ich habe keinen Einfluss auf die Formatierung der CSV Ausgabe von Aida64. Und der Webshop (1und1) erlaubt nicht die Verwendung beliebiger Platzhalter.
Es gibt im Prinzip nur "Überschrift", "Kurzbeschreibung" und "Beschreibung".
Die ganzen vielfältigen Daten müssen alle in eine CSV Zelle (für "Beschreibung") und darin dann schon formatiert sein. Ich sehe da nur den Weg über HTML Code.
Member: colinardo
Solution colinardo Jan 24, 2015 updated at 14:14:46 (UTC)
Goto Top
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 face-wink 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 ...
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'} | %{  
    #.......
}
oder mit Wildcards
$csv | ?{$_.ItemID -like '25*'} | %{  
    #.......
}
oder mit Regular Expressions
$csv | ?{$_.ItemID -match '^25[0-9]$'} | %{  
    #.......
}
Die Möglichkeiten sind da vielfälltig.
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
Member: Salektro
Salektro Jan 24, 2015 at 14:15:58 (UTC)
Goto Top
Ok, das ist ja super. Muss ich mich dann reinarbeiten.
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.

Viele Grüße
André
Member: colinardo
colinardo Jan 24, 2015 at 14:20:11 (UTC)
Goto Top
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:
#!/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  
Grüße Uwe