Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 25. 11. 2012 18:05:01

koumak
Člen
Registrace: 25. 11. 2012
Příspěvků: 4

Aktualizacia listu podla ineho listu - VYŘEŠENO

Zdravim

Trapim sa s eshopom. Mam databazu vyrobkov v csv. V mojom subore mam nejake vyrobky, kazdy ma svoje cislo, nazov, kategoriu atd.
Dalej mam csv subor od dodavatela, ktory pravidelne aktualizuje skladovy stav a ceny. Da sa nejak hromadne prepisat napr iba stlpec mnozstvo a cena v mojom csv podla toho druheho csv? V oboch csv ma kazdy vyrobok priradene rovnake specificke cislo. Vyrobky v tych csv nie su v rovnakom poradi, nie je ich rovnaky pocet.

uz som z toho nanervy yikes
Dakujem pekne za kazdu pomoc


____________________________________________
Značím jako vyřešené


;o)

Editoval sedlacekdan (23. 12. 2012 14:27:13)

Offline

#2 25. 11. 2012 18:43:00

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,468

Re: Aktualizacia listu podla ineho listu - VYŘEŠENO

Lze to pomocí CountIf, nebo SumIf. Pomocí CountIf zjistíme, jestli je v obou sešitech stejná položka. Pomocí SumIF vrátíte cenu podle položky. Takže jde vlastně o to, co chcete dál dělat. Přepsat zastaralý údaj, nebo připsat nový - prozatím neexistující - a nebo něco jiného?


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 25. 11. 2012 19:03:01

koumak
Člen
Registrace: 25. 11. 2012
Příspěvků: 4

Re: Aktualizacia listu podla ineho listu - VYŘEŠENO

Ano potrebujem prepisat moj zastaraly podla noveho od dodavatela (ak sa zmenil), a ak pribudli nove potrebujem pridat ten novy z dodavatelovho do mojho.

Mam okolo 5000 poloziek, preto hladam nieco hromadne smile

Editoval koumak (25. 11. 2012 19:04:28)

Offline

#4 25. 11. 2012 21:03:04

sedlacekdan
Moderátor
Místo Nehvizdy
Registrace: 21. 6. 2010
Příspěvků: 617

Re: Aktualizacia listu podla ineho listu - VYŘEŠENO

Vítejte na fóru,


Pokud se obě databáze neliší ve struktuře (pořadí položek) tak bych prostě kopíroval. "Problém" CSV je totiž v tom, že data uchovává pouze jako text a nezachová tedy vyhledávací vzorce a bylo by nutné je vždy zadávat znovu a znovu.

Je možné si vytvořit soubor .ODS, kam umístíte vzorec a po aktualizaci hodnoty jej prostě vyexportujete jako .CSV.

Použít ale vyhledávací vzorce pro 5000 položek ja masakr a aktualizace může trvat velmi dlouho.


Zřejmě by bylo nejlepší automatizovat postup pomocí maker. I tak to ale může trvat delší dobu, je nutné testovat každou položku, respektive její cenu.


;o)


Linux Mint 16 Petra - Apache OpenOffice 4.0.1
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#5 25. 11. 2012 21:08:13

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,468

Re: Aktualizacia listu podla ineho listu - VYŘEŠENO

Nejdříve bych otestoval nové položky (nový sešit) na existenci položek ve starém sešitě. To bych udělal vzorcem =IF(COUNTIF(ListStarý.A1:A5000;číslo položky=z řádku nového sešitu)=1;"";1). Takto vznikne v novém sešitě jednička u těch položek, které ve starém sešitě neexistují. Seřadíme Podle tohoto ukazatele a překopírujeme. Následně vzorcem SumIf prověžíme položky starého sešitu na změnu. Na to bych ale doporučoval dát ukázku sešitu, do které to já nebo někdo jiný udělá. Jinak se asi ztratíte v zadávání vzorců. Stačí pár položek aby bylo vidět do jakého sloupce vložit vzorec a podobně.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#6 26. 11. 2012 01:25:45

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 844

Re: Aktualizacia listu podla ineho listu - VYŘEŠENO

sedlacekdan napsal(a)

Použít ale vyhledávací vzorce pro 5000 položek ja masakr a aktualizace může trvat velmi dlouho.

Není to takový problém, calc umí přes milón řádků, s tím si musí poradit.

Následující postup dokáže propojit cca milion řádků během několika sekund (nepočítám časy třídění, ručního kopírování a zápisu vzorečků)

Základem je třídění -

1. setřiďte podle klíče starý seznam
2. do pomocného sloupce vedle nového seznamu vyplňte vzorcem

=nový_klíč=INDEX(starý_seznam_klíčů;MATCH(nový_klíč;starý_seznam_klíčů;1))

Starý seznam musí být setříděný, jinak to nefunguje. Pokud setřídění není možné, lze použít vzorec:

=MATCH(nový_klíč;starý_seznam_klíčů;0)

Je to o dost rychlejší než použití countif, ale o hodně pomalejší prohledání setříděného seznamu.

3. Setřiďte nový seznam podle pomocného sloupce a do starého seznamu doplňte nové hodnoty

4. Setřiďte nový seznam podle klíče

5. Vedle starého seznamu si vytvořte sloupec s hodnotou indexu (pořadí) starého klíče v novém seznamu. Vzorec vypadá takto:

=IF(ISERROR(MATCH(starý_klíč;nový_seznam_klíčů;1);0;IF(starý_klíč = INDEX(nový_seznam_klíčů;MATCH(starý_klíč;nový_seznam_klíčů;1));MATCH(starý_klíč;nový_seznam_klíčů;1);0)

Z opakovaných volání funkce MATCH není třeba mít obavy, v setříděném seznamu je velice rychlá (nejméně 1000krát rychlejší než sekvenční hledání), lze ji ovšem vyčlenit do samostatného sloupce.

Funkce vrací 0 pokud starý klíč v novém seznamu není - s touto informací naložte podle potřeby.

6. K aktualizaci ostatních dat použijte funkci

IF(pom_sloupec>0;INDEX(Nová_tabulka; pom_sloupec;číslo sloupce s cenou); "Nejsou data")

Offline

#7 26. 11. 2012 06:22:30

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,468

Re: Aktualizacia listu podla ineho listu - VYŘEŠENO

Tedy pravdou je to, že nejprve musí být csv vloženo do Calcu, a následně zjistit (zajistit) určitou strukturu dat nejlépe tak, aby byly seznamy shodné. Takže do listu1 vložíme nový seznam a do listu2 starý seznam. Pokud nejsou seznamy stejné strukturou musíme je upravit
   Pokud jsou shodně naformátované můžeme pokračovat dál. Dalším problémem může být cena kterou zjišťujeme. Může být vyšší i nižšší. Takže výsledek by měl být uspořádán jako původní cena a vedle nová cena.
   Pokud by se uživatel spokojil jen s aktuálním druhem ceny, postačí ke zpracování pouhé třídění. Jednoduše starému seznamu přidat index (nebo i opačně jen novému) a oba seznamy sloučit, následně setřídit podle čísla a vzorcem vybrat duplicity ceny - ty pak smazat. Následně ponechat jen nové ceny, nebo posoudit dalším vzorcem, zda jsou vyšší, či nižšší. Ve výsledku by to vlastně mohly být jen nové zápisy a vybrat ty staré, které nemají nový ekvivalent.
   Podobná problematika se tu už řešila, ale stejně asi bez ukázky jak data vypadají není možné pomoci. Také může být podstatné k jakému účelu seznam slouží. Když to bude pro vlastní maloobchod jsou důležité zmeny ceny porovnávané k původním. Pokud to bude pro účely zpracování (posouzení) rozpočtu nějaké akce, budeme asi vybírat jen lacinější položky.

Editoval neutr (26. 11. 2012 06:35:15)


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#8 26. 11. 2012 18:15:37

koumak
Člen
Registrace: 25. 11. 2012
Příspěvků: 4

Re: Aktualizacia listu podla ineho listu - VYŘEŠENO

Je to pre maloobchod.
Teraz mam vela skoly, o par dni sa na to vrhnem a pochvalim sa, ci som bol uspesny alebo nie smile
Mozem upnut tie moje subory, ak by sa s tym niekomu chcelo zaoberat smile
zatial dakujem pekne

Offline

#9 2. 12. 2012 13:43:47

koumak
Člen
Registrace: 25. 11. 2012
Příspěvků: 4

Re: Aktualizacia listu podla ineho listu - VYŘEŠENO

Neutr mas pravdu, stratil som sa v tych vzorcoch sad

Takze upujem subory.
Ak by sa s tym niekomu chcelo pohrajkat, bol by som velmi vdacny.

Dodavatel.csv
Moj.csv
(UTF-8)

Zopakujem co potrebujem aby ste to nemuseli hladat:

-Zistit ci sa v subore dodavatel.csv nachadzaju polozky, ktore sa v moj.csv nenachadzaju, ak ano dostat ich do moj.
-porovnat stlpec nasa cena v moj.csv s dodavatel.csv, pripadne rovno skopirovat ceny z dodavatel do moj.
-Ak sa v moj nachadza polozka, ktora sa nenachadza v dodavatel, znamena to, ze uz nie je skladom, ale nechcem ju z moj vymazat, iba zmenit hodnotu v stlpci "Je skladom (a/n)" z "a" na "n"

Editoval koumak (2. 12. 2012 13:53:49)

Offline

#10 2. 12. 2012 16:55:41

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 844

Re: Aktualizacia listu podla ineho listu - VYŘEŠENO

Do sešitu moj vložte aloupec A a vyplňte ho datumem.
Na konec tohoto listu přidejte data z dodavatel a zadejte datum (mělo by odpovítat datu aktualizace, minimáoně by mělo být větší než původní data.

Setřiďte list napřed podle kodu výrobku, druhý klíč je datum, obě položky vzestupně.

Na listu jsou tak všechny položy setříděné podle kódu, a stejné kódy podle data.

Vložte list 2.
Do první řádku vložte popisky sloupců, ve sloupci A místo data napište "Pouzice"
(ve sloupci bude pro každý kód číslo řádku s nejaktálnějším záznamem.

Do buňky A2 vložte:

=MATCH(List1.$C$2;List1.$C$1:$C$1000000;1)

Do buňky A3 vložte:

=MATCH(INDEX(List1.$C$1:$C$1000000;A2+1);List1.$C$1:$C$1000000;1)

A vzorec kopírujte dolů, dokud nebude vracet chybu

Do ostatních buněk vložíme vzorec:

=INDEX(List1.$B$1:$AY$1000000;$A2;COLUMN()-1)

Zkopíruje aktuální záznam do listu

Jestli je poožka skladem zjistíme vzorcem

=IF(INDEX(List1.$A$1:$A$1000000;$A2)=$List3.$B$1;"A";"N")

V buňce $List3.$B$1 je vzorec:

=MAX($List1.$A$2:$A$1000000)

(posledí datum)

Přehlédl jsem poznámku eshop v prvním dotazu, myslím, že by bylo vhodné hledat jiné řešení, než calc (databáze).


Moj 1.ods

(seznamy jsem trochu zkrátil)

Editoval lp. (3. 12. 2012 01:40:15)

Offline

#11 2. 12. 2012 17:28:37

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,468

Re: Aktualizacia listu podla ineho listu - VYŘEŠENO

Já jsem si to stáhl vložil do jednoho sešitu a prozkoumal. Je tam problém s porovnáním cen. Místo částky tam nemůže být URL, respektive by tam nějaká cena měla být a ne vůbec nic (prázdná kolonka).
Tady je návrh jak by to šlo řešit - ale určitě to potřebuje dobrousit po mnoha liniích.
Porovnání sklad.ods
Udělal jsem tam poznámky pod kolonky "cena". Až budete prohlížet sjeďte na konec sloupců. Tam by jste měl pochopit, že každý sloupec čte z jiného listu a textové pole vedle čísla není v relaci se skutečností. Jen demonstruje jak to lze udělat (vyjádřit). Všechny kolonky lze sloučit i do jediného (velice složitého) vzorce. Pro pochopení si uvědomte, že hodnoty čísel ve stejném řádku nejsou ekvivalentní položky. (Já je sice v textu porovnávám, ale je to blbost jen pro ukázání co by mohlo být napsáno).
 

  Ve výsledku podobně jako Countif pro zjištění použijeme SUMIF pro ceny a vše to bude jen k Vašemu skladu. Teprve na konci budou připsány nové položky. Číslice 1 a 0 detekují existenci. V prvém případě zjišťuje zda Vaše konkrétní položka je (potom 1), nebo není (potom 0) v seznamu dodavatele. Ve druhém sloupci je to opačně. Druhý sloupec má víc položek a jen demonstrativně ukazuji heslo "porovnat ceny" ap. Vzorce jsou na rozsahu od řádku 2 do řádku 10002. (I když normálně na konci nejsou vidět, což je test pro vaši mašinu - jestli tohle vůbec uveze - teda měla by snadno).


Samozřejmě lze použít i jiné systémy vzorců a systematiky například tak jak uvádí lp. Dokonce by možná bylo nejlepší vložit oba seznamy do jednoho listu a setřídit. (Ten Váš má číslo v buňkách sloupce A - dodavatel jej pochopitelně nemá). Po setřídění už použijeme jednodušší systémy vzorců a lze to udělat jako makro na jedno kliknutí.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#12 7. 12. 2012 08:21:40

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,468

Re: Aktualizacia listu podla ineho listu - VYŘEŠENO

Diskuse umřela. Já jsem ji vlastně jen nakousl, ale upřesnění jsem se nedočkal. Uvedu tedy alespoň něco, co povede k rychlému řešení, které by mohlo vyhovovat jak tomuto příspěvku, tak těm podobným v budoucnu.


   Pokud budeme hledat nekomplikovanou cestu k podobnému problému, bude skutečně nejsnadnější použít vzájemné sloučení a seřazení. Toto pak jen přefiltrovat standardním filtrem. S trochou důvtipu je možné upřednostnit původní seznam, nebo naopak nový. Vzhledem k potřebám podle zadání to sice není úplně to správné, ale mohlo by vyhovovat. Podrobnější návod je od Michala Poláka zde : Vložení textu, převod dat z řádku do sloupce a duplicita

Editoval neutr (7. 12. 2012 08:31:42)


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#13 9. 12. 2012 09:54:10

LIT
Člen
Místo Liberec
Registrace: 8. 12. 2012
Příspěvků: 57

Re: Aktualizacia listu podla ineho listu - VYŘEŠENO

Použil jsem soubor od neutr a trochu jsem ho upravil.Ve sloupcích ID pomocí podmíněného formátování jsou zvýraznělé položky které jsou nové,nejsou v nabídce dodavatele a které ceny aktualizovat.Co barvy znamenají je listu porovnanie_listov.
Problém je,že v souboru Moj.CSV je v cenách jako oddělovač desetiných míst použita tečka.Je to potřeba změnit na čárku.
Pokud chci kopírovat nové položky z listu dodavatel do sloupce A se vloží x a hodnoty se zkopírují pomocí vzorců od sloupce BA do CX.Potom tuto oblast zkopírovat  a vložit do listu moj,ale jenom data(ne vzorce).Pak setřídit v listu moj podle kodu.A je to(aspoň doufám).



Porovnání sklad.ods


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ
Windows 10, Libre Office, Lenovo Ideapad

Offline

#14 9. 12. 2012 15:11:00

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,468

Re: Aktualizacia listu podla ineho listu - VYŘEŠENO

To, co jste udělal je dobré a i zbytek řešení se mi zdá schůdný (ale neprověřoval jsem to).

Jenomže diskusi otevřel Koumák a ten měl také upřesňovat, popřípadě se vyjádřit, že tak ano, nebo tak ne. Já bych asi měl udělat zbytek řešení ve formě variant. Buď tu první s nějakou modifikací vzorců, nebo tu druhou s tříděním pomocí standardního filtru. Také jsem mohl přidat makro na 1 kliknutí vše, protože mnoho aktuálních vzorců znamená zátěž pro počítač a akce bude opakovaná vícekrát za sebou.
  Vcelku v tom není nic nežli to, že někdo by měl napsat něco jako "Vyřešeno", nebo alespoň děkuji už jsem to vyřešil jinak, nebo něco podobného. Když to autor nedá najevo a prostě přestane komunikovat tak jsem to dělal prakticky zbytečně. Je sice zřejmé, že si to pár lidí stáhne ze zvědavosti, ale za půl roku to otevře jen omylem někdo ze záložky hledání. Hledá přece vyřešené příklady a ne ty otevřené. Takže za půl roku se objeví podobný problém a pojede se nanovo.

  Takže čekáme na Koumáka. Pokud má někdo jiný zájem o tuhle, nebo podobnou problematiku ať otevře nové vlákno.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#15 10. 12. 2012 01:01:02

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 844

Re: Aktualizacia listu podla ineho listu - VYŘEŠENO

Pár úprav by to ještě sneslo.

Ad výpočet: Zjišťování výskytu položky v seznamu pomocí COUNTIF je i v takto malých seznamech zvěrstvo (pomalé).

Ad zvýrazňování: I v takto krátkém seznamu to dále zpomaluje výpočet. Navíc je chybné (Při použití COUNTIF nemůžete testovat výskyt 1 - řada položek ve seznamu může být (a také je) vícekrát.

Ad aktualizace: Nechtěl bych seznam aktualizovat navrženou metodou - listovat přes 5 tis. řádků a podle barvy hledat a označovat aktualizované položky. Je nutné umístit na list něco, podle čeho lze tyto položky nalézt. 

Ad vzorce: Sloupec AZ:

 =IF(B3>0;VLOOKUP(B3;B3:G11001;6);"") 

lze přepsat na

=IF(B3>0;G6;"")

Zápis v použité podobě se přepočte při každé změně kterékoliv ceny - zpomaluje to odezvu při úpravách.

Automatická konverze "" na 0 také automaticky vždy nefunguje.

=1+"" => #VALUE!

Offline

#16 10. 12. 2012 20:32:59

LIT
Člen
Místo Liberec
Registrace: 8. 12. 2012
Příspěvků: 57

Re: Aktualizacia listu podla ineho listu - VYŘEŠENO

Je to nástřel jak by to šlo udělat. Neříkám že je dokonalý a je potřeba to upravovat. Souhlasím s názorem který zde neutr správně píše ve příspěvku nad námi. Diskuzi by měl vést hlavně koumak ,který toto téma otevřel.


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ
Windows 10, Libre Office, Lenovo Ideapad

Offline

Zápatí