Stránka 1 z 1

Skript na kontrolu excelového souboru

Napsal: 02 úno 2016 15:57
od Jsimi
Ahoj Všem
Prosím o radu se skriptem, který vytvořil uživatel "ITCrowd".
Tento skript provádí kontrolu a odeslání excelového souboru na dané emaily. Dokud byl daný soubor uložen ve verzi excelu 2003 /soubor.xls/, vše fungovalo jak má. Nyní došlo k uložení souboru v novém formátu /soubor.xlsx/ a bohužel skript už nepozná změnu souboru.
Pozná to jen pokud je soubor s dané složky smazán a opět vytvořen.
Poradí prosím někdo?

Kód: Vybrat vše

'**********************************************
'*   Script testuje soubor excelu na změnu    *
'* Pokud je soubor změněn odešle jej e-mailem *
'*       vytvořeno pro PC-Help                *
'*                                            *
'*        Etienna@Script v1.0                 *
'**********************************************

Option Explicit
Dim fso, oFile, Text, Pause
Dim objOutlk   'Outlook
Dim objMail   'Email item
Dim strMsg
Const olMailItem = 0
Const file = "\\CZSTET02.steti.local\DISK_G\GROUPS\Departments\Provoz Steti\BP-Balici papiry\Veřejné\Dovolená a rozpisy  BP PS 3,6\Rozpis směn PS 3,6.xlsx"  ' hlídaný soubor na změnu
Pause = 30 'Počáteční zpoždění v ms
WScript.Sleep Pause
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set oFile = fso.GetFile(file)
 Text = "Soubor " & oFile.Name & "  rozpis byl změněn. Dojde k automatickému odeslání"
'test xls
  If oFile.Attributes AND 32 Then
   MsgBox Text, vbOKOnly + vbInformation, "Upozornění"
   Odeslani
   oFile.Attributes = oFile.Attributes XOR 32
  End If

Sub Odeslani
'Nová zpráva
   Set objOutlk = createobject("Outlook.Application")
   Set objMail = objOutlk.createitem(olMailItem)
   objMail.To = "Simunek.Jarosl@email.cz
      'objMail.cc = " " 'Zde adresa pro kopii; objMail.bcc pro skrytou adresu
'Předmět
   objMail.subject = "Rozpis " & cstr(day(now)) & ". " & cstr(month(now)) & ". " & cstr(year(now))
'Zpráva   
   strMsg = "Změna rozpisu." & vbcrlf
   strMsg = strMsg & "Miroslav Šimánek.Mistr BP."
   strMsg = strMsg & "Toto je informativní email, směrodatný je rozpis v daném umístění na síti Mondi. Pro info - je nastavená kontrola rozpisu každých 48 hod.pokud dojde ke změně, je automaticky odeslán, proto je vždy nejaktuálnější ten, který přijde jako poslední. J.Šimůnek"
'Příloha
   objMail.attachments.add(file)
   objMail.body = strMsg
'    objMail.display 'Zobraz před odesláním, jinak rovnou objMail.Send pro odeslání
   objMail.Send
End sub
'Clean up
Set objMail = Nothing
Set objOutlk = Nothing
Set fso = Nothing
Set oFile = Nothing

Re: Skript na kontrolu excelového souboru

Napsal: 02 úno 2016 16:14
od Uziv00
Ahoj,
jsem rád, že skript tak dlouho sloužil.
K problému - je to skutečně tak, u nové verze tohle zjištění změny souboru nefunguje. Nicméně řešitelné to je. Skript musí nejdříve otestovat, zda je soubor otevřen pro zápis, a pokud ne, zkontroluje datum a čas poslední verze. Stejný problém jsem řešil, když jsme přešli na ofiice10.
Úpravu kódu mám, jen ji musím najít.
Tak tě musím zklamat. Úprava, kterou používáme se pro tvůj případ nehodí. :-(

Dodatečně přidáno po 6 hodinách 17 minutách 35 vteřinách:
Řešil jsem to zde: viewtopic.php?f=61&t=113233
Moje metoda se opírá o to, že skript (v rozporu s pravidly) běží nepřetržitě. Ve tvém případě tomu tak není.
Můžu zkusit kontrolu přes hash, nebo crc, ale rozhodně to nebude hned. Máš zájem?
Možná by bylo nejjednodušší řešení použít dateLastModified a ukládat si hodnotu do textového souboru. Pak by změna byla detekovatelná nerovností hodnot. Bylo by tohle pro tebe schůdné?

Re: Skript na kontrolu excelového souboru

Napsal: 03 úno 2016 18:34
od Jsimi
Ahoj,
Vcelku je mi jedno jak to funguje, co jsi mi popsal jak by to mohlo jít je úplně mimo mojí mísu, ale musím upozornit, že Tvůj skript se spouštěl na jednom PC v pravidelných intervalech a na dalším PC se provádělo řízené odesílání emailů po změně /vedoucí pracovník/. Ale každopádně všem tato pravidelnost odesílání rozpisu chybí, takže budu jedině velmi vděčný za tvou pomoc. Nerad bych se vracel k excelu 2003.

Re: Skript na kontrolu excelového souboru

Napsal: 15 úno 2016 16:51
od Uziv00
Ahoj,
V řádcích Dim doplň:

Kód: Vybrat vše

Dim txtStream, oLogFile, DLM, DLMx

Ke Const dopiš:

Kód: Vybrat vše

Const cesta = "C:\scr\ScriptLog\"
Const DLMLog = "C:\scr\ScriptLog\DLMlog.txt"

Před 'Test xls doplň:

Kód: Vybrat vše

DLM = oFile.DateLastModified

' První spuštění - soubor logu existuje?
If (Not fso.FolderExists(cesta)) Then fso.CreateFolder(cesta)
If Not fso.FileExists(DLMLog) Then
Set txtStream = fso.CreateTextFile(DLMLog, 8, True)
txtStream.WriteLine CStr(DLM)
txtStream.Close 
Set txtStream = Nothing
End If

Set oLogFile = fso.GetFile(DLMLog)
DLMx = oLogFile.DateLastModified

Položku 'test xls uprav takto:

Kód: Vybrat vše

If DLM > DLMx Then
    Set txtStream = fso.CreateTextFile(DLMLog, 8, True)
    txtStream.WriteLine CStr(DLM)
    txtStream.Close 
    MsgBox Text, vbOKOnly + vbInformation, "Upozornění"
    Odeslani
End If

Na konec skriptu dopiš:

Kód: Vybrat vše

Set txtStream = Nothing
Set oLogFile = Nothing

Pokud je skript spouštěn s více počítačů, pak cesta musí být někde na síti. Adresář "ScriptLog" si skript vytvoří sám (pokud neexistuje). Soubor DLMlog.txt si taky vytvoří sám, pokud neexistuje. Tento texťák obsahuje poslední verzi souboru, a tato je pak přepsána, takže má velikost cca 50B.
Pokud ho někdo smaže, nic se neděje, skript si vytvoří nový, jen se spustí procedura odeslání.
Jiný způsob řešení mě nenapadl.

Re: Skript na kontrolu excelového souboru

Napsal: 19 úno 2016 07:59
od Jsimi
Ahoj,
Děkuji za pomoc, funguje jak má.

Re: Skript na kontrolu excelového souboru

Napsal: 19 úno 2016 09:25
od Uziv00
Tak to jsem rád.
Pak můžeš téma označit jako vyřešené.

Re: Skript na kontrolu excelového souboru

Napsal: 16 dub 2016 07:45
od Jsimi
Ahoj,
Prosím znovu o pomoc. Po spuštění skriptu a potvrzení dotazu Outlooku zda povolit odeslání emailu se objeví tato hláška.
Poradí někdo kde je problém?
Děkuji

Re: Skript na kontrolu excelového souboru

Napsal: 18 dub 2016 19:23
od Uziv00
Budeš muset ten skript sem vložit. Potřebuji se podívat, co je špatně.

Re: Skript na kontrolu excelového souboru

Napsal: 19 dub 2016 16:53
od Jsimi
Ahoj
Tady je ten kód bez emailových adres. Ze začátku to fungovalo bez problému. Ta hláška se začala objevovat až teď.

Kód: Vybrat vše

**********************************************
'*   Script testuje soubor excelu na změnu    *
'* Pokud je soubor změněn odešle jej e-mailem *
'*       vytvořeno pro PC-Help                *
'*                                            *
'*        Etienna@Script v1.0                 *
'**********************************************

Option Explicit
Dim fso, oFile, Text, Pause
Dim objOutlk   'Outlook
Dim objMail   'Email item
Dim strMsg
Dim txtStream, oLogFile, DLM, DLMx
Const olMailItem = 0
Const file = "\\CZSTET02.steti.local\DISK_G\GROUPS\Departments\Provoz Steti\BP-Balici papiry\Veřejné\Dovolená a rozpisy  BP PS 3,6\Rozpis směn PS 3,6.xlsx"  ' hlídaný soubor na změnu
Const cesta = "\\CZSTET02.steti.local\DISK_G\GROUPS\Departments\Provoz Steti\BP-Balici papiry\Veřejné\Dovolená a rozpisy  BP PS 3,6\ScriptLog\"
Const DLMLog = "\\CZSTET02.steti.local\DISK_G\GROUPS\Departments\Provoz Steti\BP-Balici papiry\Veřejné\Dovolená a rozpisy  BP PS 3,6\ScriptLog\DLMlog.txt"
Pause = 30 'Počáteční zpoždění v ms
WScript.Sleep Pause
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set oFile = fso.GetFile(file)
 Text = "Soubor " & oFile.Name & "  rozpis byl změněn. Dojde k automatickému odeslání"
 DLM = oFile.DateLastModified

' První spuštění - soubor logu existuje?
If (Not fso.FolderExists(cesta)) Then fso.CreateFolder(cesta)
If Not fso.FileExists(DLMLog) Then
Set txtStream = fso.CreateTextFile(DLMLog, 8, True)
txtStream.WriteLine CStr(DLM)
txtStream.Close 
Set txtStream = Nothing
End If

Set oLogFile = fso.GetFile(DLMLog)
DLMx = oLogFile.DateLastModified
'test xls
 If DLM > DLMx Then
    Set txtStream = fso.CreateTextFile(DLMLog, 8, True)
    txtStream.WriteLine CStr(DLM)
    txtStream.Close 
    MsgBox Text, vbOKOnly + vbInformation, "Upozornění"
    Odeslani
End If
Sub Odeslani
'Nová zpráva
   Set objOutlk = createobject("Outlook.Application")
   Set objMail = objOutlk.createitem(olMailItem)
   objMail.To = ""
   objMail.cc = "" 'Zde adresa pro kopii; objMail.bcc pro skrytou adresu
'Předmět
   objMail.subject = "Rozpis " & cstr(day(now)) & ". " & cstr(month(now)) & ". " & cstr(year(now))
'Zpráva   
   strMsg = "Změna rozpisu." & vbcrlf
   strMsg = strMsg & ""
   strMsg = strMsg & ""
'Příloha
   objMail.attachments.add(file)
   objMail.body = strMsg
'    objMail.display 'Zobraz před odesláním, jinak rovnou objMail.Send pro odeslání
   objMail.Send
End sub
'Clean up
Set objMail = Nothing
Set objOutlk = Nothing
Set fso = Nothing
Set oFile = Nothing
Set txtStream = Nothing
Set oLogFile = Nothing

Re: Skript na kontrolu excelového souboru

Napsal: 19 dub 2016 17:16
od Uziv00
Podle mě máš prasácké názvy.
Zkus to s inteligentními normálními a může to jít. Na skriptu chybu nevidím.
odkdy tam máš v názvu tu desetinou čárku? neblbne to od té doby?

Re: Skript na kontrolu excelového souboru

Napsal: 20 dub 2016 22:42
od Jsimi
Po tvé kontrole, jsem začal testovat s adresami a na konec se ukázalo, že tu hlášku způsobuje vadná email. adresa. Moc děkuji za tvou pomoc.

Re: Skript na kontrolu excelového souboru

Napsal: 21 dub 2016 10:35
od Uziv00
Není zač, na chybu jsi přišel sám :D