42020
Goto Top

E-Mail mit Blat.exe

Hallo zusammen,

ich habe eine Frage zu dem Tool Blat.exe. Dieses kleine Programm verschickt automatisch e-mails mit Anhang. Da gehts auch scho los. Ich habe mir nämlich eine Excel-Tabelle zusammengestellt, die in der ersten Spalte Daten und in der zweiten Spalte eine Bemerkung dazu hat (z.B. 12.07.2007 Bemerkung).

Ist es möglich, dem Tool zu sagen, es soll in der Excel-Tabelle schauen ob ein Eintrag zum heutigen Datum vorhanden ist und mir ggf. eine e-mail mit der entsprechenden Bemerkung schickt?

Ich hoffe das dieser Beitrag verständlich ist!


Gruß und Danke für die Antworten!

Content-Key: 59858

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

Printed on: April 26, 2024 at 21:04 o'clock

Member: TuXHunt3R
TuXHunt3R May 25, 2007 at 19:25:26 (UTC)
Goto Top
Bei einem Excel-File müsstest du sehrwarscheinlich VBScript zur Hand nehmen.


Bei einem Textfile könnte ein Batchscript so aussehen:


type liste.txt | find /i "%date%"
if errorlevel 0 (

blat (Optionen)

) else (
echo Kein Eintrag fuer das heutige Datum vorhanden
)


Weiss halt nicht, ob dir damit geholfen ist........
Member: broecker
broecker May 25, 2007 at 20:21:28 (UTC)
Goto Top
wird denn, auch wenn es nichts zu bemerken gibt, etwas in die Datei geschrieben?
sonst könnte man doch einfach abends - abhängig vom letzten Zugriffsdatum gem. Dateisystem - eine Mail lossenden.
Member: bastla
bastla May 25, 2007 at 20:35:09 (UTC)
Goto Top
Hallo MGA!

Ich kann mich TuXHunt3R's Ansicht (Bei einem Excel-File müsstest du sehrwarscheinlich VBScript zur Hand nehmen.) nur anschließen und Dir daher folgende Vorgangsweise vorschlagen:

Erstelle (zB in C:\Scripts) das folgende VB-Script "EintragZumDatum.vbs":
Const ExcelDatei = "D:\Tageskommentar.xls"  
If WScript.Arguments.Count < 1 Then WScript.Quit(1)
Dat = WScript.Arguments(0)
If Not IsDate (Dat) Then WScript.Quit(1)
Datum = CDate(Dat)
Set XL = WScript.CreateObject("Excel.Application")  
XL.Workbooks.Open ExcelDatei
i = 3 'Zeilennummer der ersten Datenzeile  
With XL.Worksheets(1)
	Do While .Cells(i,1).Value <> ""  
		If .Cells(i,1).Value = Datum Then
			WScript.Echo .Cells(i,2).Value
			Exit Do
		End If
		i = i + 1
	Loop
End With
XL.ActiveWorkbook.Saved = True
XL.Application.Quit
Den Dateinamen der Exceldatei in der ersten Zeile des Scripts musst Du natürlich an Deine Gegebenheiten anpassen. Dies gilt auch für die erste Zeile der Exceltabelle (im Beispiel oben Zeile 3), die ein zu prüfendes Datum enthält.

Vorausgesetzt wird, dass die Spalte A ab der angegebenen Zeile (also zB 3) lückenlos die Datumseinträge enthält - eine leere Zelle in Spalte A wird als "Ende"-Kennzeichen des Datenbereiches interpretiert.

Das obige Script kannst Du dann wie folgt in einer Batch-Datei verwenden:
@echo off & setlocal
set Bemerkung=
for /f "delims=" %%i in ('cscript //nologo C:\Scripts\EintragZumDatum.vbs %date%') do set "Bemerkung=%%i"  
if not defined Bemerkung echo Kein Eintrag gefunden ... & goto :eof
echo blat mit Message %Bemerkung% starten ...
Anstelle von %date% kann auch ein bestimmtes Datum (in der Schreibweise TT.MM.JJJJ) übergeben werden.

Die beiden "echo"-Befehle dienen natürlich nur zu Demonstrationszwecken, die vorletzte Zeile könnte also zB auch mit
if not defined Bemerkung goto :eof
kommentarlos die Batchdatei beenden.

Grüße
bastla
Mitglied: 42020
42020 May 26, 2007 at 00:54:50 (UTC)
Goto Top
Hallo,

Danke für die die schnellen Lösungsvorschläge!! Ich habe zwar beides ausprobiert, bin aber nicht zum Erfolg gekommen.
Wie setzte ich denn die von euch beschriebenen Batch-Dateien bzw. VBS-Scripte in den Blatguy ein? Geht das überhaupt? Oder muss ich auf die Kommandozeile wechseln?


Grüße,
MGA
Member: bastla
bastla May 26, 2007 at 08:09:48 (UTC)
Goto Top
Hallo MGA!

Da "blat.exe" zumeist von der Kommandozeile aus eingesetzt wird, war ich davon ausgegangen, dass das auch bei Dir so wäre.

Die Batch-Script-Kombination könntest Du auch für "blatguy" verwenden, indem Du einfach die letzte Batch-Zeile in zB
echo %Bemerkung%>"D:\Bodyfile.txt"  
änderst. Dadurch wird die Datei "D:\Bodyfile.txt" mit der aus der Excel-Datei gelesenen Bemerkung neu erstellt. Falls Du mehr Text dazu benötigst, kannst Du diesen mit weiteren "echo"-Zeilen erstellen, zB
echo Das war's für heute.>>"D:\Bodyfile.txt"  
Wichtig ist dabei, mit ">>" den Text an die bestehende Datei anzuhängen, bzw nur beim ersten Mal mit ">" in die Datei zu schreiben (und sie damit neu zu erstellen).
Vielleicht beschreibst Du aber erst einmal die bisher von Dir vewendete Vorgangsweise etwas genauer.

Grüße
bastla
Mitglied: 42020
42020 May 26, 2007 at 12:24:36 (UTC)
Goto Top
Hi bastla,

1)
jetzt klappt´s!! Beim ersten mal hab ich irendwas falsch gemacht oder übersehen.
Eines hab ich aber noch nicht ganz verstanden bzw. es funktioniert bei mir net.
Meine Excel-Tabelle fängt bei A3 mit dem ersten Datum (26.05.2007) an. In B3 steht der dazugehörige Text. Dies wird dann auch in die Bodyfile.txt geschrieben.

Aber: In A4 steht das gleiche Datum mit einem anderen Text (in B4). Dieser Text aus B4 wird nicht mehr in die Bodyfile.txt geschrieben.
Ich hab den Text aus B4 in C3 kopiert in der Hoffnung das die Bemerkung dann in die Textdatei geschrieben wird. Dem war aber nicht so.

Was kann man den da noch machen?

2)
Nachdem jetzt Dank Deiner Hilfe (fast) alles klappt, ist mir noch was eingefallen. Ist es möglich, die Bemerkung für morgen (heutiges Datum +1) auch mitanzeigen zu lassen?


Viele Grüße,
MGA
Member: bastla
bastla May 26, 2007 at 16:01:19 (UTC)
Goto Top
Hallo MGA!

Was kann man den da noch machen?
... vielleicht beim nächsten Mal die gewünschte Lösung gleich etwas genauer beschreiben ... face-wink

Aber ist ja nun kein Beinbruch - versuch' es mit diesen Versionen:
Const ExcelDatei = "D:\Tageskommentar.xls"  
If WScript.Arguments.Count < 1 Then WScript.Quit(1)
Dat = WScript.Arguments(0)
If Not IsDate (Dat) Then WScript.Quit(1)
Datum = CDate(Dat)
Set XL = WScript.CreateObject("Excel.Application")  
XL.Workbooks.Open ExcelDatei
i = 3 'Zeilennummer der ersten Datenzeile  
With XL.Worksheets(1)
	Do While .Cells(i,1).Value <> ""  
		If Int(.Cells(i,1).Value) = Datum Or Int(.Cells(i,1).Value) = Datum + 1 Then
			WScript.Echo .Cells(i,2).Value
		End If
		i = i + 1
	Loop
End With
XL.ActiveWorkbook.Saved = True
XL.Application.Quit
Ich gehe davon aus, dass jede Bemerkung in eine eigene Zeile geschrieben werden soll. Die Batch-Datei würde dann etwa so aussehen:
@echo off & setlocal
set Bemerkung=
set "BodyFile=D:\BodyFile.txt"  
del "%BodyFile%" 2>nul  

:: ab hier entsteht der Inhalt des neuen BodyFiles
echo Hallo!>>"%BodyFile%"  
echo Noch eine Leerzeile, und dann geht's los mit den Infos>>"%BodyFile%"  
echo.>>"%BodyFile%"  

for /f "delims=" %%i in ('cscript //nologo C:\Scripts\EintragZumDatum.vbs %date%') do set Bemerkung=neu & echo %%i>>"%BodyFile%"  
if defined Bemerkung goto :Fertigstellen

::Da war nix ...
echo Keine Daten zu versenden!
del "%BodyFile%"  
goto :eof

:Fertigstellen
::Der restliche Body:
echo.>>"%BodyFile%"  
echo So, das war's für heute ...>>"%BodyFile%"  
echo Grüße>>"%BodyFile%"  

:: und jetzt die "blat"-Kommandozeile 
blat "%BodyFile%" -to me@home.de -server ...  

Grüße
bastla
Mitglied: 42020
42020 May 26, 2007 at 18:46:56 (UTC)
Goto Top
Serves bastla!

Das funktioniert hervorragend!! Sorry dafür, dass Du Dir die Mühe hast zwei mal machen müssen! Mir ist das mit der Erinnerung für "Morgen" aber erst später gekommen.

Jetzt hab ich noch zwei kleine Fragen (des hätt mir auch schon zuvor einfallen können):

1. Zwischen dem Text von heute und dem für Morgen möchte ich noch ne Leerzeile und vielleicht noch nen kleinen Satz dazu.

2. Kannst Du mir irgendwelche Pages oder Nachschlagewerke empfehlen, die das Thema VBS behandeln? Ich find Deine Lösung nämlich echt GENIAL!!

Gruß,
MGA
Member: bastla
bastla May 26, 2007, updated at Oct 18, 2012 at 16:32:00 (UTC)
Goto Top
Hallo MGA!

Folgende Änderung: Beim Aufruf des VB-Scripts wird das "Basisdatum" (im Normalfall also das heutige Datum mit %date%) und, bei Bedarf, eine Differenz in Tagen übergeben. Damit erspare ich uns die Berechnung des Datums (für morgen) über Batch oder ein weiteres VB-Script, was, wie ich meine, das zusätzliche "Plus" face-wink im Script-Dateinamen rechtfertigt ...
'EintragZumDatumPlus.vbs  
'Argumente: Gesuchtes Datum [, Offset in Tagen]  
Const ExcelDatei = "D:\Tageskommentar.xls"  
If WScript.Arguments.Count < 1 Then WScript.Quit(1)
Dat = WScript.Arguments(0)
If Not IsDate (Dat) Then WScript.Quit(1)
Offset = 0
If WScript.Arguments.Count > 1 Then
	If IsNumeric(WScript.Arguments(1)) Then Offset = WScript.Arguments(1)
End If
Datum = CDate(Dat) + Offset
Set XL = WScript.CreateObject("Excel.Application")  
XL.Workbooks.Open ExcelDatei
i = 3 'Zeilennummer der ersten Datenzeile  
With XL.Worksheets(1)
    Do While .Cells(i,1).Value <> ""  
        If Int(.Cells(i,1).Value) = Datum Then
            WScript.Echo .Cells(i,2).Value
        End If
        i = i + 1
    Loop
End With
XL.ActiveWorkbook.Saved = True
XL.Application.Quit
In der Batchdatei kannst Du jetzt die beiden Tage getrennt abrufen:
@echo off & setlocal
set Bemerkung=
set "BodyFile=D:\BodyFile.txt"  
del "%BodyFile%" 2>nul  

:: Ab hier entsteht der Inhalt des neuen BodyFiles:
echo Hallo!>>"%BodyFile%"  
echo Noch eine Leerzeile, und dann geht's los mit den Infos für heute>>"%BodyFile%"  
echo.>>"%BodyFile%"  

:: Bemerkungen für heute holen (Angabe einer Tagedifferenz von 0 kann unterbleiben)
for /f "delims=" %%i in ('cscript //nologo C:\Scripts\EintragZumDatumPlus.vbs %date%') do set Bemerkung=neu & echo %%i>>"%BodyFile%"  

:: Jetzt für morgen: zuerst Leerzeile und Einleitung
echo.>>"%BodyFile%"  
echo Und morgen dann:>>"%BodyFile%"  

:: Bemerkungen für "Heute + 1 Tag" holen 
for /f "delims=" %%i in ('cscript //nologo C:\Scripts\EintragZumDatumPlus.vbs %date% +1') do set Bemerkung=neu & echo %%i>>"%BodyFile%"  

if defined Bemerkung goto :Fertigstellen

::Da war nix ...
echo Keine Daten zu versenden!
del "%BodyFile%"  
goto :eof

:Fertigstellen
::Der restliche Body:
echo.>>"%BodyFile%"  
echo So, das war's ...>>"%BodyFile%"  
echo Grüße>>"%BodyFile%"  

:: und jetzt die "blat"-Kommandozeile 
blat "%BodyFile%" -to me@home.de -server ...  

Kannst Du mir irgendwelche Pages oder Nachschlagewerke empfehlen, die das Thema VBS behandeln?
Schau einmal zum Ende dieses Threads ...

Grüße
bastla
Member: Biber
Biber May 29, 2007 at 05:24:47 (UTC)
Goto Top
Moin MGA, moin bastla,

ich denke, dieser Beitrag strebt nun unaufhaltsam dem Status "Gelöst" entgegen, so daß hier wenig Restarbeiten zu erwarten sind. Eigentlich nur das Grünen-Haken-Setzen. *g

Meine Bitte an Dich, bastla:
Könntest Du bitte den einen oder anderen der Links, auf die Du eben verwiesen hast, mal in einer ruhigen Minute als "Empfohlene Links" dauerhaft hinterlegen?
Aus meiner Sicht im Bereich "Batch & Shell", wo sich ja das Meiste an Skript-Lösungen angesammelt hat.
Oder in einem neuen Bereich "VBS/WMI/WSH-Skripting", wenn Du den Mod spielst face-wink

Angenehmen Wochenbeginn
Biber
Mitglied: 42020
42020 May 30, 2007 at 21:34:34 (UTC)
Goto Top
Hi bastla,

es klappt jetzt alles super!!
Vielen Dank für Deine Hilfe!

Grüßle

MGA