Adatfeldolgozás segítség kérése

Van egy nyilvántartó program, amiből naponta kétszer töltök le egy-egy excel fájlt, a két időpont között új sorok keletkeznek a táblázatban az új sorok egy része már szerepel az előző táblázatban, csak bizonyos cellák tartalma változik, míg más sorok teljesen újak.

A feladat az, hogy meg kell nézni, hogy az előző állapothoz képest mennyi az olyan új sor ami még egyáltalán nem szerepel. Az eredmény egy szám hogy mennyi az új sor.

Az új sorokat hozzá kellene fűzni az előző táblázathoz, így az első táblázat folyamatosa bővülne.

A rendelkezésre álló szoftverek MS Office Excel és Access 2007.

Amit szeretnék, hogy az excel fájt megetetem az access-el, megcsináltatom az összehasonlítást és kapok egy számot, valamint egyéb lekérdezéseket is lefuttatok aminek az eredményéből grafikont készítettetek.

Mindezt úgy kellene megvalósítani, hogy egy adott könyvtárba bemásolva az új fájt és elindítva az access adatbázis fájt, automatikusan  felismerné, hogy van új fájl abból kiszedné az új sorokat és törölné, majd elvégezné az egyéb lekérdezéseket és frissítené a grafikonokat.

A gépen Windows 10 van, a szoftverek fixek, nem tudok telepíteni, esetleg ha van olyan ingyenes szoftver amivel a fenti dolog könnyebben megvalósítható rábírható a vezető, hogy telepítésre kerüljön.

Az access-ban az összehasonlítást meg tudom csinálni, meg a lekérdezéseket is le tudom futtatni, de mindezt úgy kellene megoldani, hogy ha én nem vagyok a kollégák is meg tudják csinálni.

Hozzászólások

Nálam ez már rendes program, nem próbálnám meg makrókkal vagy nemtudommivel. Főleg mivel nem is tudok makrókat programozni :-).

Vannak libek, amik kezelik az XLS-eket. Olyannal kinyitnám a két fájlt, és azzal megcsinálnám. Például Apache POI van Java-hoz, alapvetően működőképes.

Ha nagyon egyszerű a táblázat szerkezete, akkor soralapú exportot csinálnék, és azt text feldolgozó eszközökkel gyúrnám, aztán visszacsinálnám táblázattá. Mármint elvben ez is működhetne, de én alapvetően program párti vagyok egy bonyolultsági szint felett.

Már tegnap, amikor elolvastam a bejegyzést ez jutott, eszembe. Ezt holmi ügyeskedéssel nem lehet megoldani (de hátha valaki mégis tud ilyet).
Viszonylag egyszerű lenne, ha csv -ben mentené a táblázatokat. Akkor ezt egy kis scriptel is meg lehetne oldani (lehet még a windows -ban is megvannak a hozzá szükséges parancsok) az alap unix szöveg piszkáló programok freeware grep, sed, awk. A végeredmény persze csv lenne, de azt simán beolvassa az excel.

* Én egy indián vagyok. Minden indián hazudik.

"A feladat az, hogy meg kell nézni, hogy az előző állapothoz képest mennyi az olyan új sor ami még egyáltalán nem szerepel."

No akkor definiáljuk pontosabban a feladatot... Mi alapján döntöd el, hogy egy adott sor nem szerepel az előző állapotban? Mert ami változott, az sem szerepel az előzőben, ha a teljes sort nézzük.

Ha megvan, mi az az oszlop/oszlopok halmaza), ami alapján dönteni kell, hogy új vagy "már volt", akkor lehet számolni, hogy "mennyi az annyi". És ezzel már a leválogatást is lehet úgy csinálni, hogy csak az újakat adja vissza.

Ezzel a részével nincs olyan nagy gond, több oszlop összehasonlításával több lépcsőben eldönthető, hogy melyik rekord új. Sajnos nincs olyan oszlop amelyben szereplő adatokat egyedi kulcsként lehetne használni és amelyik alkalmas lenne erre sajnos van, hogy hiányzik, vagy elírták. Ezért kell a több oszlopos összehasonlítás.

 

 

Ha hiányzik valami, az nem lehet egyedi kulcs, mert az egyedi kulcs az not null, de semmi gond - ha több oszlop van, amivel eldöntöd "valahogy", hogy az új vagy sem, akkor azt a döntési "fát" kell jól megfogalmaznod, és utána vagy Access/sql vagy Excel oldalon megírni a megfelelő programot, ami ezt végrehajtja. Második körben meg az Access oldalon kéne rendet csinálni, mert esélyes, hogy a DB-oldalon más khm. problémák is vannak, ami miatt a DB nem tud arra a kérdésre egyszerű és hatékony választ adni, hogy mi az, ami új...

"Ha hiányzik valami, az nem lehet egyedi kulcs, mert az egyedi kulcs az not null, de semmi gond" igen tudom, azért írtam, hogy lehetne, de sajnos nem így lett tervezve, nincs kikényszerítve a kötelező kitöltése és nem fut le rá ellenőrzés, hogy a megadott szám megfelel-e az előírásnak (jól meghatározott számsor).

Amiből az excel-t kinyerem az Oracle adatbázis, ha ahhoz közvetlenül hozzáférhetnék (esélytelen), vagy lenne valami API (nincs) amin keresztül elérhetném akkor sokkal egyszerűbb lenne a helyzetem.

"amivel eldöntöd "valahogy", hogy az új vagy sem, akkor azt a döntési "fát" kell jól megfogalmaznod"

Igen az előző hosszá szólásod után kezdtem el gondolkodni, hogy hogyan is csinálom kézzel a keresést és rá kellett jönnöm, hogy nem egyszerű lefordítani, mert sokszor van olyan, hogy én erre emlékszem ennek már benne kellene lennie és akkor csak töredék adatra keresek és a feldobott találatokból látom, hogy szerepel-e már vagy sem.

Az a gond, hogy míg 10-20-30-40 új rekord érkezett az viszonylag gyorsan át tudtam nézni, de amikor 100-200 új sor keletkezik az már munkásabb.

Szeretném a sok kézi munkát megúszni, de úgy hogy közben az adatok is pontosak maradnak.

Erdemes megtanulni pythonul. Az xlsx-hez van library, de en inkabb pandas-sal ugranek neki, pd.read_excel, es elvileg behuzza a tablazatodat dataframe-be (excellel mondjuk pont nem probaltam). Onnantol megy az osszes adatmanipulacios dolga. (ja, es par oras youtube tutorial alapjan elsajatithato)

When you tear out a man's tongue, you are not proving him a liar, you're only telling the world that you fear what he might say. -George R.R. Martin

Perl-hez is van nagyszerű xls/xlsx modul, sőt minden értelmes nyelvből lehet valamilyen módon kezelni az xls/xlsx fájlokat, de itt sokkal inkább ODBC és sql vonalon indulnék neki, ha már Access van a láncolat elején, ugyanis ahhoz, hogy xls-ben megtalálja azt, ami még addig nem volt, ahhoz pontosan meg kell tudni fogalmaznia azt a feltételt, amivel kiválogatja ezen sorokat - és ezzel a feltétellel csak egy select-et kell megírni, hogy ugyanezt a DB-ből is lehúzza.

Pont ebben a cipőben jártam fél évvel ezelőtt. Excel, MySQL és ODBC adatokat kellett egybegyúrnom és CRM rendszerbe feltölteni.
Azelőtt kézi exportok, PHP feldolgozás és feltöltés naponta egyszer. Egyszer csak szembejött egy panda.

Kb 2 hét volt mire belejöttem és megcsináltam a scriptet. Most kb. 80mp, amíg begyűjti az adatokat a fenti forrásokból és feldolgozza. 40mp, míg feltölti az adatbázisba. És ezt minden negyedórában megcsinálja már több hónapja éjjel-nappal. Az adatok olyanok, hogy teljes feldolgozást csinálok, nem csak a friss sorokat dolgozom fel (több évre visszamenőleg is változhatnak sorok)

Marha jó kis cuccos. A jupyter notebook meg hatalmas segítség volt ehhez.
Szóval érdemes lenne ennek az iránynak is adni egy esélyt.

Az Accessbe nem lehet becsatolni a nyilvántartó program adatbázis tábláit? Akár odbc-vel, ha nincs jobb? Akkor az Excel bohóckodás teljesen kiküszbölhető lenne.

Ha nem megy, csináld meg úgy az Accessben, hogy a két xls fix fájlszerver elérési útvonalon van, be van csatolva Accessbe, és a kollégák csak naponta felülcsapják a két xls-t, természetesen fix fájlnévvel, majd az Accessben lefuttatják a lekérdezést. Kb. ez tűnik a legegyszerűbbnek.

Egyszerubb feladatokhoz hasznalhatod az Excel Power Query funkciojat. Ha van Power BI, az meg jobb. Igy nem kell a kulonbozo rendszerek kozti konverzioval foglalkoznod.

"Programozni" persze kell hozza, es eleg agybetegy a nyelv. Azonban, ha alap adatbazismuveletek mennek, akkor eleg szimplan megoldhato a feladat (hacsak nem egy katasztrofa a bemeneti adat).