michaellas
Goto Top

Änderungen von .txt datei überwachen und in Excel einfügen

Hallo, bin seit heute neu bei Admin.de, und hab auch schon mein erstes Problem.
Hoffe irgend jemand hat eine Idee.

Ich habe in der Arbeit ein Progr. bei dem ich aus der Druckvorschau einen csv String in eine .txt Datei speichern kann.
Die .txt Datei habe ich in eine Excel Volage eingebunden, die sich beim öffnen aktualisiert.

Nun möchte ich erreichen, das sobald die .txt Datei überschrieben wird automatisch meine .xlt Datei geöffnet wird.

Ist es möglich, das ganze über Excel in der Datei (mit Makro) zu hinterlegen,
oder könnte ich es evtl. mit einem Batch an die .txt Datei versuchen?
und gibt es irgendwo einen Virtuellen Drucker, der mir die CSV direkt in eine .txt speichern kann?? Hab nur .pdf Drucker gefunden.

DANKE für alle Antworten die mich zum Nachdenken animieren

Content-Key: 138122

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

Printed on: April 16, 2024 at 13:04 o'clock

Member: bastla
bastla Mar 12, 2010 at 20:22:09 (UTC)
Goto Top
Hallo michaellas und willkommen im Forum!
gibt es irgendwo einen Virtuellen Drucker, der mir die CSV direkt in eine .txt speichern kann??
Da es sich bei Deinem nicht genannten Betriebssystem vermutlich um ein Windows handelt, könntest Du es mit der Installation eines lokalen Druckers "Generic / Text Only" versuchen (bis XP unter dem Hersteller "Standard", ab Vista unter "Generic" zu finden) - als Anschluss bietet es sich in beiden Fällen an, einen "Local Port" zu erstellen ...

Grüße
bastla
Member: michaellas
michaellas Mar 12, 2010 at 20:57:33 (UTC)
Goto Top
Hallo
Ja es ist Windows xp.
Und der Generic/TextOnly wird verwendet um auf einem Tally Drucker diesen CSV in eine gleichbleibende Druckvorlage einzubetten. Kann ich mit "Generic/TextOnly" den CSV String, nicht nur an den Drucker senden, sondern diesen etwa in eine Datei speichern lassen? Muß ich Montag gleich mal versuchen.

Hab leider mit meinen Rechten bei dem Programm, keine Möglichkeiten irgendetwas zu verändern, nur die Möglichkeit in .txt zu konvertieren(zwar etwas umständlich aber es funkt.) und kann mir so die Daten von der Druckvorlage für meine Vorlage zu nutze machen. (sollte halt aber mit so wenig Schritten wie möglich gehen).
Member: TsukiSan
TsukiSan Mar 12, 2010 at 23:02:24 (UTC)
Goto Top
Hallo michaellas,

mit vbs kannst du zum Beispiel mit:
Dim Aenderung, ZuletztGespeichert

Pruefen
wscript.Sleep 10000
Pruefen
wscript.Sleep 10000
Pruefen
'..........  
Sub Pruefen ()
    Pfad = "C:\MeineDatei.txt"  
     Set FSO = CreateObject("Scripting.FileSystemObject")  
    Set F = FSO.GetFile(Pfad)
    Aenderung = F.DateLastModified
   If not Aenderung = ZuletztGespeichert then
       ZuletztGespeichert = Aenderung
      'Befehle ausführen  
  End If
    Set FSO = nothing
    Set F = nothing
End Sub
eingestellter Zeit prüfen, wann sich das Datum deiner zu überwachenden Datei geändert hat.
Sprich, wann diese aktuallisiert wurde zuletzt. Und dann dementsprechend deine gewünschten Aktionen ausführen.

Gruss
Tsuki
Member: bastla
bastla Mar 13, 2010, updated at Oct 18, 2012 at 16:41:23 (UTC)
Goto Top
Hallo michaellas!
Kann ich mit "Generic/TextOnly" den CSV String, nicht nur an den Drucker senden, sondern diesen etwa in eine Datei speichern lassen?
Siehe Hinweis auf "Local Port" ...

Zum Überwachen eines Ordners hatten wir hier einen Beitrag ...

Grüße
bastla
Member: michaellas
michaellas Mar 13, 2010 at 18:52:06 (UTC)
Goto Top
Hallo Tsuki

DANKE für den Code, funktioniert super, auch wenn ich nicht alle Befehle verstehe.

Aber halt nur wenn ich die Excel Datei geöffnet habe.
Mein Problem ist , wenn ich die .txt Datei ändere (mit neuen Daten füttere) sollte Excel die Vorlage automatisch und von sich aus starten.
Member: TsukiSan
TsukiSan Mar 13, 2010 at 23:59:18 (UTC)
Goto Top
Hallo michaelles,

also wenn ich es richtig verstehe hast du eine "Vorlage"-Datei als Excel. In diese soll
bei Änderung der .txt oder .cvs Datei die neuen Daten in die Excel-Vorlage eingetragen werden,
z.Bsp.: Text1 in Zeile/Spalte "A1" usw.?
In diesem Falle bräuchten wir etwas mehr Details über Aufbau der .txt-Datei und was soll
in welche Felder bei Excel dann eingetragen werden.
Dann können wir den Script anpassen.
Und zwar in etwas so:
TestZeit 60 Sekunden:
Dim Aenderung, ZuletztGespeichert
Dim Pfadtxt , PfadExl
Dim PruefZeit
Dim objXLs


Pfadtxt = "C:\MeineDatei.txt"  
PfadExl = "C:\MeinExcel.xls"  
PruefZeit = 60


    Set FSO = CreateObject("Scripting.FileSystemObject")  
    Set F = FSO.GetFile(Pfadtxt)
    Aenderung = F.DateLastModified
       	ZuletztGespeichert = Aenderung
    Set FSO = nothing
    Set F = nothing


For i = 0 to PruefZeit
	Pruefen
	wscript.Sleep 1000
Next

Sub Pruefen ()
	on error resume next
    Set FSO = CreateObject("Scripting.FileSystemObject")  
    Set F = FSO.GetFile(Pfadtxt)
    Aenderung = F.DateLastModified
    If not Aenderung = ZuletztGespeichert then
       	ZuletztGespeichert = Aenderung
      	Set objXLs = WScript.CreateObject("Excel.Application")  
    		objXLs.Workbooks.Open PfadExl
		objXls.Visible = false
		objXls.Range("A1").Value = Pfadtxt   
		objXls.Range("A2").Value = ZuletztGespeichert  
		objXls.Visible = True
	
   End If
    Set FSO = nothing
    Set F = nothing
    Set objXLs = nothing
End Sub

WScript.Echo "PruefeDateiaufAenderung-Script beendet"  

Gruss
Tsuki
Member: michaellas
michaellas Mar 14, 2010 at 09:52:14 (UTC)
Goto Top
Hallo Tsuki danke für deine Antwort.

Pfadtxt = "C:\MeineDatei.txt"
PfadExl = "C:\MeinExcel.xls"

Pfadtxt = "I:\Michael auf i\Michi Ordner Allgemein\alles was Arbeit\TESTBEREICH\txtmit excel\PROBE2.txt
PfadExl = "I:\Michael auf i\Michi Ordner Allgemein\alles was Arbeit\TESTBEREICH\txtmit excel\txtprobeteil2.xls"

Hab hier den Pfad eingetragen,aber es kommt "Fehler beim Kompilieren"
"Außerhalb einer Prozedur ungültig"
(Hab sicher irgendwas falsch gemacht.)

In diesem Falle bräuchten wir etwas mehr Details über Aufbau der .txt-Datei

Die txt Datei die ich abspeichern kann hat z.B. (Text;Datum;Text;Zahl;.....)

In meiner ExcelVorlage hab ich es ganz einfach so gelöst, das beim öffnen der Vorlage mit Hilfe "Externe Daten Importieren" die Daten der .txt Datei Automatisch eingefügt werden.(Aufbau und Länge der .txt ist immer gleich, nur der Inhalt ändert sich.
in Tabelle1 A1;B1;C1;... kommen die Daten z.B (Text;Datum;Text;Zahl;...)
in Tabelle2, Tabelle3,... übernehme ich dann die Daten für meine Druckvorlage wo ich noch Daten ergänzen kann.

Was ich erreichen möchte ist, zu vereinfachen wenn ich (vom Programm aus das ich nicht ändern kann) die .txt Datei ändere, sofort mit der ExcelVorlage weiterarbeiten kann, ohne diese irgendwo öffnen zu müssen.
Member: TsukiSan
TsukiSan Mar 14, 2010 at 10:38:16 (UTC)
Goto Top
Hallo michaellas

in
Pfadtxt = "I:\Michael auf i\Michi Ordner Allgemein\alles was Arbeit\TESTBEREICH\txtmit excel\PROBE2.txt
fehlen am Ende die "Ausführungszeichen" "
Dann stellt sich mir die Frage, was VBS
Hab hier den Pfad eingetragen,aber es kommt "Fehler beim Kompilieren"
da kompiliert. Hast du den Script als .vbs abgespeichert?

Was ich erreichen möchte ist, zu vereinfachen wenn ich (vom Programm aus das ich nicht ändern kann) die .txt Datei
ändere, sofort mit der ExcelVorlage weiterarbeiten kann, ohne diese irgendwo öffnen zu müssen.
das würde mein Code-Schnipsel erst einmal tun soweit. Aller dings müssen dann nur noch die Daten aus der .txt -Datei in die richtigen Felder deiner Exceldatei eingetragen werden.
Wenn du deinen Code schon etwas fertig hast (zum testen einfach mal) dann poste ihn doch mal.
Mit Beispiel, wie die Daten in der Textdatei aussehen und wo was von deiner .txt-Datei in welche Excelzeile soll.
Dann können wir das gemeinsam fertig bekommen.

Gruss
Tsuki
Member: michaellas
michaellas Mar 15, 2010 at 13:12:30 (UTC)
Goto Top
HalloTsuki
Hab einwenig gebraucht und mir erst mal klar werden müssen was vbs eigentlich ist!!!!!!!
Hab es mit VBA verwechselt!!!!!!!

nun mal die Datenface-sadsiehe unten)
mal abgesehen von den Daten´, irgendwie öffnet sich die Vorlage aber noch nicht wenn ich die .txt überschreibe.

TEXT Datei liegt auf (wird von mir immer überschrieben;Aufbau bliebt immer gleich)

P:\Schreibtisch\Listen\U-Bericht aktuelle Daten\RCA_BexSchein_CSV.txt

%%%BEXSCHEIN_LANG%%%
22249379;Zustellung: 12.03.2010;Tür;DEPOT:140;;;RailExpress;;Regelverkehr;;;;X;;; ;Peter Eichinger;;;Kagranerplatz;Wien;;A-1220;1220PET134;;33267808;Gel Express Logistik GmbH;;;Hans Martin Schleyer-Str. 15;Willich;;D-47877;8183196;DE160410593; ; ;1; ;1 Colli Handelsware;;;;;57.00;LC 22;Wien Hirschstetten; ; ; ; ;11.03.2010;LC 46;Wels;;;;;1403326780;33267808;11.03.10;BEX; ; ;11.03.2010; ;;;; ;1. : 1 Colli Handelsware;;Rohmasse [kg]: 57 ;; ; {|};{~}
%%%JOBEND%%%

EXCEL Vorlage liegt auf
P:\Schreibtisch\Listen\U-Bericht aktuelle Daten\U-Bericht mit CSV.xlt

%%%BEXSCHEIN_LANG%%%
`soll in Tabelle1 A20 stehen
22249379
`soll in Tabelle1 A21 stehen
Zustellung:12.03.2010
`soll in Tabelle1 B21 stehen
`C21;D21;.......usw
%%%JOBENDE%%%
`soll in Tabelle1 A22 stehen


mein VBS Script liegt auf
P:\Schreibtisch\Listen\U-Bericht aktuelle Daten\txtvbstest.vbs
Dim Aenderung, ZuletztGespeichert
Dim Pfadtxt , PfadExl
Dim PruefZeit
Dim objXLs


Pfadtxt = "P:\Schreibtisch\Listen\U-Bericht aktuelle Daten\RCA_BexSchein_CSV.txt"  
PfadExl = "P:\Schreibtisch\Listen\U-Bericht aktuelle Daten\U-Bericht mit CSV.xlt"  
PruefZeit = 60


    Set FSO = CreateObject("Scripting.FileSystemObject")  
    Set F = FSO.GetFile(Pfadtxt)
    Aenderung = F.DateLastModified
       	ZuletztGespeichert = Aenderung
    Set FSO = nothing
    Set F = nothing


For i = 0 to PruefZeit
	Pruefen
	wscript.Sleep 1000
Next

Sub Pruefen ()
	on error resume next
    Set FSO = CreateObject("Scripting.FileSystemObject")  
    Set F = FSO.GetFile(Pfadtxt)
    Aenderung = F.DateLastModified
    If not Aenderung = ZuletztGespeichert then
       	ZuletztGespeichert = Aenderung
      	Set objXLs = WScript.CreateObject("Excel.Application")  
    		objXlt.Workbooks.Open PfadExl
		objXlt.Visible = false
		objXlt.Range("A18").Value = Pfadtxt   
		objXlt.Range("A19").Value = ZuletztGespeichert  
		objXlt.Visible = True
	
   End If
    Set FSO = nothing
    Set F = nothing
    Set objXLs = nothing
End Sub

WScript.Echo "PruefeDateiaufAenderung-Script beendet"  

P.S.
Hab zwar schon einige Sachen in VBA gemacht, aber VBS ist komplettes Neuland für mich.

[Edit Biber] ad "Hab zwar schon einige Sachen in VBA gemacht, aber VBS ist komplettes Neuland für mich."
Aber beide kann man/frau in Codetags setzen (s.o.) [/Edit]
Member: TsukiSan
TsukiSan Mar 15, 2010 at 23:24:38 (UTC)
Goto Top
Hi michaelles,

mein Beispielscript sollte dir zumindest einmal eine Meldung in ein Xls-File schreiben, sobald sich etwas
am Speicherdatum(zeit) deiner txt-Datei ändert. Das müßte auch soweit fiúnktionieren.
Jetzt möchte ich erst mal etwas das VBS-Schnipsel erklären und was du später machen kannst:
Dim blabla
definiert dir Variablen, die du später an anderer Stelle benötigst
Das FileSytemObject
Set FSO = CreateObject("Scripting.FileSystemObject")   
benötigen wir, um auf Dateien zugreifen zu können. Dabei ist egal ob wir mit
Set FSO '......  
"FSO" wählen. Das können wir nennen, wie wir wollen. Wichtig ist nur das einer Variablen das FileSystemObject
gesetzt wird.
Dateien öffnen, schreiben oder lesen geht mit folgender Anweisung:
' Art, wie die Datei geöffnet werden soll  
'ForReading   = 1   
'ForWriting   = 2   
'ForAppending = 8  
'hier schreiben:  
Set MeineDatei = FSO.OpenTextFile("D:\testfile.txt", 8)  
MeineDatei.WriteLine (time)
MeineDatei.WriteLine ("Test")  
MeineDatei.Close
'hier auslesen:  
Set MeineDatei = FSO.OpenTextFile("D:\testfile.txt", 1)  
MeineDaten =MeineDatei. ReadAll '(ReadLine)  
MeineDatei.Close
mit
wscript.Sleep 1000 
erreichen wir einen Sleeptimer von 1000ms.
mit der for -Schleife im Zusammenhang des Sleeptimers und der maximalen Anzahl der Schleifendurchläufe (in unseren Beispiel)
 PruefZeit = 60 
erreichen wir, das die Subroutine "Pruefen" für 1 Minute aufgerufen wird, im Abstand von einer Sekunde jeweils.
Somit läuft das Script mindestens 1 Minute lang
in der Sub Prüfen musst du dann deine Befehle einbauen.
mit
    Set FSO = CreateObject("Scripting.FileSystemObject")   
    Set F = FSO.GetFile(Pfadtxt) 
    Aenderung = F.DateLastModified
    If not Aenderung = ZuletztGespeichert then 
         'Befehle  
    end if 
prüfen wir, ob die letzte Änderung (Abspeichern der txt-Datei) gleich geblieben ist oder neu abgespeichert worde.

Ich denke, du solltest das erst einmal soweit nachvollziehen können in unserem Script. Den Aufruf der Excel-Datei und das Auswerten deiner Text-Datei widmen wir uns später zu, da ich schon wieder einen Termin habe.

Melde dich bitte.

Viele Grüße
Tsuki
Member: bastla
bastla Mar 15, 2010 at 23:36:23 (UTC)
Goto Top
@tsuki
Vielleicht doch noch einmal als Tipp (das Original zum unten verlinkten Beitrag): How Can I Automatically Open New Files Added to a Folder? ...

Grüße
bastla
Member: TsukiSan
TsukiSan Mar 16, 2010 at 12:32:47 (UTC)
Goto Top
@bastla,

das ist auf jeden Fall ein super Tipp!
Dieser Script überwacht einen ganzen Ordner und dessen Inhalt (Dateien) auf Änderung.
Ich bin nur auf michaelles Frage eingegangen und wollte erklären, wie man generell eine Datei überwachen "könnte".
Trotzdem sollte michaelles sich deinen Tipp auch anschauen und analysieren und sich zum Schluss für das (für ihn) bessere Script entscheiden. Du bist da die bessere Hilfe, als ich.

Vielen Dank und viele Grüße

Tsuki
Member: michaellas
michaellas Mar 16, 2010 at 14:12:53 (UTC)
Goto Top
Hallo
DANKE an Euch beide!!!!
Bin gerade etwas im Stress ( viel Arbeit mit Arbeit) (viel Arbeit mit Kind)
Bin aber schon dabei Euer Wissen in mich aufzunehmen.(kann aber einige Tage dauern)
DANKE
Member: TsukiSan
TsukiSan Mar 16, 2010 at 22:12:28 (UTC)
Goto Top
Hallo michaellas,

nur keine Hetz.
nimm dir Zeit und nicht das Leben face-wink

Gruss
Tsuki