Skript na kontrolu excelového souboru

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

Jsimi
Level 1.5
Level 1.5
Příspěvky: 119
Registrován: červen 12
Pohlaví: Muž
Stav:
Offline

Skript na kontrolu excelového souboru

Příspěvekod Jsimi » 02 úno 2016 15:57

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

Reklama
Uziv00
Pohlaví: Nespecifikováno

Re: Skript na kontrolu excelového souboru

Příspěvekod Uziv00 » 02 úno 2016 16:14

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é?

Jsimi
Level 1.5
Level 1.5
Příspěvky: 119
Registrován: červen 12
Pohlaví: Muž
Stav:
Offline

Re: Skript na kontrolu excelového souboru

Příspěvekod Jsimi » 03 úno 2016 18:34

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.

Uziv00
Pohlaví: Nespecifikováno

Re: Skript na kontrolu excelového souboru

Příspěvekod Uziv00 » 15 úno 2016 16:51

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.

Jsimi
Level 1.5
Level 1.5
Příspěvky: 119
Registrován: červen 12
Pohlaví: Muž
Stav:
Offline

Re: Skript na kontrolu excelového souboru

Příspěvekod Jsimi » 19 úno 2016 07:59

Ahoj,
Děkuji za pomoc, funguje jak má.

Uziv00
Pohlaví: Nespecifikováno

Re: Skript na kontrolu excelového souboru

Příspěvekod Uziv00 » 19 úno 2016 09:25

Tak to jsem rád.
Pak můžeš téma označit jako vyřešené.

Jsimi
Level 1.5
Level 1.5
Příspěvky: 119
Registrován: červen 12
Pohlaví: Muž
Stav:
Offline

Re: Skript na kontrolu excelového souboru

Příspěvekod Jsimi » 16 dub 2016 07:45

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
Přílohy
Nový obrázek.jpg

Uziv00
Pohlaví: Nespecifikováno

Re: Skript na kontrolu excelového souboru

Příspěvekod Uziv00 » 18 dub 2016 19:23

Budeš muset ten skript sem vložit. Potřebuji se podívat, co je špatně.

Jsimi
Level 1.5
Level 1.5
Příspěvky: 119
Registrován: červen 12
Pohlaví: Muž
Stav:
Offline

Re: Skript na kontrolu excelového souboru

Příspěvekod Jsimi » 19 dub 2016 16:53

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

Uziv00
Pohlaví: Nespecifikováno

Re: Skript na kontrolu excelového souboru

Příspěvekod Uziv00 » 19 dub 2016 17:16

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?

Jsimi
Level 1.5
Level 1.5
Příspěvky: 119
Registrován: červen 12
Pohlaví: Muž
Stav:
Offline

Re: Skript na kontrolu excelového souboru

Příspěvekod Jsimi » 20 dub 2016 22:42

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.

Uziv00
Pohlaví: Nespecifikováno

Re: Skript na kontrolu excelového souboru

Příspěvekod Uziv00 » 21 dub 2016 10:35

Není zač, na chybu jsi přišel sám :D


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Blokování stahovaných souborů
    od Riviera kid » 07 čer 2025 16:47 » v Windows 11, 10, 8...
    10
    3901
    od Riviera kid Zobrazit poslední příspěvek
    16 čer 2025 06:56
  • IDM hláška o nemožném stažení souboru Příloha(y)
    od bluenite » 04 črc 2024 11:08 » v Vše ostatní (inet)
    2
    4383
    od bluenite Zobrazit poslední příspěvek
    06 črc 2024 19:40
  • Program na hledání poškozených souborů JPG Příloha(y)
    od Rosta_Kolmix » 09 lis 2024 11:01 » v Design a grafické editory
    2
    4551
    od Minapark Zobrazit poslední příspěvek
    15 lis 2024 11:04
  • Velikost souboru a složek na disku
    od L.L » 05 úno 2025 11:50 » v Vše ostatní (sw)
    5
    3332
    od L.L Zobrazit poslední příspěvek
    05 úno 2025 17:42
  • Prosím o kontrolu sestavy
    od user158 » 11 led 2025 15:07 » v Rady s výběrem hw a sestavením PC
    2
    1245
    od Alferi Zobrazit poslední příspěvek
    11 led 2025 17:38

Zpět na “Kancelářské balíky”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 8 hostů