lordkingpin
Goto Top

Csv Datei Tonerwerte prüfen und unter 30 Prozent Emailmeldung

Hallo,

Ich habe eine Tabelle genannt Toner.csv die so aus sieht:

Device,Serial Number,Location,Toner Level / Black,Toner Level / Cyan,Toner Level / Magenta,Toner Level / Yellow,
FS-1118MFP,XLK5505XXX,," 6%",,,,
TASKalfa 300ci,QJE8Z00XXX,," 22%"," 37%"," 39%"," 39%",
FS-3900DN,XLN6Z39XXX,," 25%",,,,
Canon iR-ADV C5030,ETF01XXX,," 56%"," 31%"," 31%"," 25%",

Einmal am Tag erhalte ich eine neue Tabelle wo ich im Prinzip immer per Hand kontrolliere, welche Maschine unter 30% Toner hat.
Dementsprechend bestelle ich den Toner und notiere mir das in einer Liste.
Am nächsten Tag das gleiche spielchen wieder von vorn mit einer aktuellen csv nur muß ich dabei jedes mal an die Maschinen denken für die ich bereits einen Toner bestellt habe.
Diesen Vorgang würde ich gerne automatisieren,
so dass ich die Datei nur quasi "einlesen" muß und ein Script/programm das kontrolliert und mich dementsprechend via Email benachrichtigt ob ein Wert unter 30% ist und wenn ja welche Maschine/Toner genau.

Da einmal am Tag eine aktuelle Toner.csv eingelesen werden soll, sollte ich keine Email von einer Maschine bekommen die am Vortag schon gemeldet wurde.
Jedoch sobald der Wert wieder über 90% ist,darf mir wieder bez. dieser Maschine eine Email geschickt werden.


Ist sowas irgendwie realisierbar? Ich habe null Plan wie ich das umsetzen könnte.
Bin für jede Hilfe dankbar.

kind regards
LordKingPin

Content-ID: 147079

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

Ausgedruckt am: 17.11.2024 um 09:11 Uhr

bastla
bastla 17.07.2010 um 12:57:01 Uhr
Goto Top
Hallo LordKingPin!

Nicht zuletzt aufgrund der Formatierung der Tonerwerte (Anführungs- und Prozentzeichen) würde ich in diesem Fall zu VBS greifen - etwa so:
Toner = "D:\Toner.csv"  
Bestellt = "D:\Bestellt.txt"  
Bestellen = 30 'Grenzwert für Nachbestellung  
Geliefert = 90 'Grenzwert für "wieder da"  

Set fso = CreateObject("Scripting.FileSystemObject")  
T = Split(fso.OpenTextFile(Toner).ReadAll, vbCrLf) 'Toner-Datei einlesen und zeilenweise in Array schreiben  

Header = Split(T(0), ",") 'Spaltenüberschriften (Toner-Bezeichnung) einlesen  

If fso.FileExists(Bestellt) Then 'Wenn Bestelllisten-Datei vorhanden, ...  
    Set Best = fso.OpenTextFile(Bestellt, 1, True)
    If Not Best.AtEndOfStream Then B = Best.ReadAll  '... gesamte Bestellliste aus Datei lesen  
    Best.Close
End If    
If B = "" Then B = vbCrLf 'Formatierung für Vergleich anpassen  

Mail = "" 'Variable für Mailtext  

For i = 1 To UBound(T) 'alle Druckerdatensätze (= ab Zeile 2 der .csv) durchgehen  
    PrinterData = Split(T(i), ",") 'Datensatz des Druckers in Felder zerlegen  
    Info = PrinterData(0) & "," & PrinterData(1) 'Drucker-Daten ("Device" und "Serial") in Variable schreiben  

    For j = 3 To 6 'Felder mit Toner-Info durchgehen  
        If InStr(PrinterData(j), "%") > 0 Then 'Prozentsatz vorhanden?  

            Wert = CInt(Replace(Replace(PrinterData(j), "%", ""), """", "")) 'Prozentwert als Zahl ermitteln  
            TonerDaten = Info & "," & Header(j) 'Daten für Toner zusammenstellen (Drucker-Daten + Toner-Name lt Spaltenüberschrift)  

            If Wert < Bestellen And InStr(B, TonerDaten) = 0 Then 'Grenzwert unterschritten und noch nicht in Liste?  
                Mail = Mail & vbCrLf & TonerDaten 'in Mailtext ...  
                B = B & vbCrLf & TonerDaten '... und Bestellliste aufnehmen  
            End If

            If Wert > Geliefert Then 'Grenzwert für "wieder da" überschritten?  
                B = Replace(B, vbCrLf & TonerDaten, "") 'aus Bestellliste entfernen  
            End If

        End If
    Next 'Feld  

Next 'Satz  

fso.CreateTextFile(Bestellt).Write B 'Bestellliste in Datei schreiben  

If Mail <> "" Then  
    WScript.Echo "Mail mit Inhalt:" & vbCrLf & vbCrLf & Mail & vbCrLf & vbCrLf & "versenden!"  
End If
Die vorletzte Zeile dient nur als Demo; hier würde sich - je nach verwendetem Mailer - ev anbieten, den Inhalt der Variablen "Mail" in eine weitere Textdatei zu schreiben ...

Grüße
bastla
LordKingPin
LordKingPin 30.07.2010 um 01:27:27 Uhr
Goto Top
Hallo bastla,

Vielen Dank für den VBS Code, genau so etwas habe ich gesucht :o)
Das ganze funktioniert spitzenmässig
Leider lag ich die letzten Wochen Krankheitsbedingt flach, darum die späte Antwort.

Ich kämpfe noch etwas mit der Mail-Variablen. Habe Outlook 2007 im Einsatz.
Wenn jemand dafür noch einen Ansatz / Lösung hätte währe das spitzenmässig ;o)

Nochmals vielen herzlichen Dank für die Hilfe :o)

kind regards
LordKingPin