VBS script a excel soubor - kontrola na změnu

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Zamčeno
Uziv00

VBS script a excel soubor - kontrola na změnu

Příspěvek od Uziv00 »

Zdravím. Na síťovém disku je uložen soubor, do kterého zapisují všichni pracovníci. Na řídícím pracovišti běží skript, který kontroluje změnu tohoto souboru a řídícího upozorní (pokud byl změněn). Protože excel změní datum a čas souboru již při otevření (při neuložení čas a datum vrátí zpět), nemohl jsem dost dobře použít systémovou proměnnou Last.Modified, která se mění taky. Vybruslil jsem z toho tak, že skript kontroloval atribut "a" souboru. Prostě, pokud tento atribut našel, oznámil změnu a atribut smazal. Bohužel po přechodu na excel 2007 jsem zjistil, že excel tento atribut dodá i při neuložení změn. Verze 2003 to nedělala. Řídící si již na upozorňování zvykli a teď pouhé prohlédnutí souboru libovolným pracovníkem vede k falešnému oznámení, že byl změněn.
Potřeboval bych nějaký nápad, jak zjistit u excelovského souboru pomocí vbs skriptu, že byl opravdu změněn. Nějaký návrh?
Díky moc za reakce.
Pro úplnost dodávám, že soubor obsahuje šest záložek a je třeba reagovat na změnu libovolné z nich. Testování na velikost by také k ničemu nevedlo, neboť například změna čísla v buňce nezpůsobí změnu velikosti souboru.
Uživatelský avatar
franticek
Level 3
Level 3
Příspěvky: 435
Registrován: 22 úno 2007 01:01

Re: VBS script a excel soubor - kontrola na změnu

Příspěvek od franticek »

Zdravím.

Co zkusit md5 nebo nějaký jiný hash souboru?
Ještě jsem našel attribut Date Last Saved, který se mění až po akci Save().
A zkoušeli jste to vypnout a zapnout?
Uziv00

Re: VBS script a excel soubor - kontrola na změnu

Příspěvek od Uziv00 »

To mě taky napadlo, ale ani hash, ani crc nejde rozumně udělat ve vbs. Je třeba programů třetích stran.
Date Last Saved by mi stačila. Jenže potřebuje zase stáhnout od mrkvosoftu DSOfile.dll. Tam je problém s během na 64 bit.
Uživatelský avatar
franticek
Level 3
Level 3
Příspěvky: 435
Registrován: 22 úno 2007 01:01

Re: VBS script a excel soubor - kontrola na změnu

Příspěvek od franticek »

Ahoj.

DSOfile.dll problém na 64-bit systému je vyřešen tady.

Jinak něco jako MD hash script je tady a vypadá, že není třeba nic 3-tích stran (pouze to asi není pravý MD5 :-) )
A zkoušeli jste to vypnout a zapnout?
Uziv00

Re: VBS script a excel soubor - kontrola na změnu

Příspěvek od Uziv00 »

Díky za snahu, ale vyřešen není. Skript musí běžet pod wscript.exe. navíc, i když ho spustím pod cscript, tak skončí chybou activex. Přitom registrace knihovny proběhla v pořádku. (Ostatně komentář o přechodu na OpenOfficeSDK mluví za vše).
Hash sice vypadá dobře, ale jen výpočet má milion řádků, což je daleko více, než měl původní skript. Nějaké jednodušší řešení by nebylo?
Zatím to zkouším přes počet obsazených řádků v sešitech, ale taky to není 100%, navíc se při každé kontrole musí spouštět objExcel.Application, což zbytečně bere procesorový výkon.
Ještě mě napadlo vzít dateLastModified a přitom zkontrolovat, zda je soubor otevřen. Ale na kontrolu otevření by bylo třeba zase něco jednoduchého.
Jinak demo ve vb7 dodané s DSOfile.dll funguje.
Uživatelský avatar
franticek
Level 3
Level 3
Příspěvky: 435
Registrován: 22 úno 2007 01:01

Re: VBS script a excel soubor - kontrola na změnu

Příspěvek od franticek »

Ahoj.

Napadlo mne udělat malou apku v C#, která buď udělá ten checksum nebo se zkusit dobrat k data last saved a zkompilovat to pro 64-bit systém.
A zkoušeli jste to vypnout a zapnout?
Uziv00

Re: VBS script a excel soubor - kontrola na změnu

Příspěvek od Uziv00 »

Tak nakonec jsem to vyřešil takto - používám DateLast Modified. V případě, že skript zjistí změnu, pak pomocí volání OpenTextFile zkusí soubor otevřít pro zápis. Chybu, kterou by to vyvolalo v případě, že je soubor používán, zachycuji za běhu. V případě chyby je jasné, že soubor někdo prohlíží, nebo edituje a tudíž skript nereaguje. Pokud chyba nenastane, pak jde o regulérní změnu souboru a skript ji oznámí. Lokálně to funguje, uvidím, jak se to bude chovat se sítí.
Tímto bych poděkoval mrkvosoftu za skvělé usnadnění práce :evil: .
Appek bych mohl napsat milion, ale -
1. musím využívat součástí windows (bez programů třetích stran)
2. kód musí být čitelný (což u exe není)
Díky za snahu.
Uživatelský avatar
franticek
Level 3
Level 3
Příspěvky: 435
Registrován: 22 úno 2007 01:01

Re: VBS script a excel soubor - kontrola na změnu

Příspěvek od franticek »

Ahoj.

Taky řešení, jinak co použít powershell? Hledaný atribut má číslo 145.

Kód: Vybrat vše

$path = 'C:\vypis1.xls' 
$shell = New-Object -COMObject Shell.Application
$folder = Split-Path $path
$file = Split-Path $path -Leaf
$shellfolder = $shell.Namespace($folder)
$shellfile = $shellfolder.ParseName($file)
0..287 | Where-Object { $shellfolder.GetDetailsOf($shellfile, $_) } |
Foreach-Object {
'{0} = {1} = {2}' -f $_,
$shellfolder.GetDetailsOf($null, $_),
$shellfolder.GetDetailsOf($shellfile, $_)
}
A zkoušeli jste to vypnout a zapnout?
Uziv00

Re: VBS script a excel soubor - kontrola na změnu

Příspěvek od Uziv00 »

No, s powershellem se teprve začínám prát :D Samozřejmě mě napadl taky, jenže není standardní součástí winXP. Problém je totiž i ten, že přehráním jednoho souboru a následným restartem, můžeme vyrobit řídící pracoviště z libovolného jiného. Takže byť tento skript běží na W7, tak v případě nouze je nutné, aby běžel i na XP. kromě toho samozřejmě nehlídá jen jeden tento soubor, ale spoustu dalších věcí, na které upozorňuje, případně řeší (např. na serveru nahazuje spadlé služby). Už proto by volání dalších aplikací a cokoli jiného, co není standardní součástí woken, bylo problematické. každopádně díky.
Uživatelský avatar
franticek
Level 3
Level 3
Příspěvky: 435
Registrován: 22 úno 2007 01:01

Re: VBS script a excel soubor - kontrola na změnu

Příspěvek od franticek »

Dobrá, dobrá, už mlčím :-).
A zkoušeli jste to vypnout a zapnout?
Uziv00

Re: VBS script a excel soubor - kontrola na změnu

Příspěvek od Uziv00 »

OK. zamykám.
Zamčeno
  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Přechod z Excel 21 na Excel 24
    od Snekment » » v Kancelářské balíky
    2 Odpovědi
    14203 Zobrazení
    Poslední příspěvek od Snekment
  • Neznámý soubor
    od robin432 » » v Programy ke stažení
    1 Odpovědi
    6117 Zobrazení
    Poslední příspěvek od atari
  • Pohoda a excel
    od brownwld » » v Kancelářské balíky
    1 Odpovědi
    7185 Zobrazení
    Poslední příspěvek od atari
  • Tisk sloupců vedle sebe na A4 - Excel
    od atari » » v Kancelářské balíky
    5 Odpovědi
    5717 Zobrazení
    Poslední příspěvek od atari
  • Excel 2016 - vzorec kombinace podmínek
    od MK_Vs » » v Kancelářské balíky
    5 Odpovědi
    5936 Zobrazení
    Poslední příspěvek od lubo.

Zpět na „Programování a tvorba webu“