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

#1 Re: Calc » Makro - Načtení externích dat - "VYŘEŠENO" » 1. 4. 2023 12:13:04

Dobrý den,

rád bych Vám poděkoval za řešení tohoto problému, a zejména za ochotu a trpělivost při procesu ladění méně zkušenému uživateli LibreOffice, který se snaží zefektivnit nejen svoji práci, ale i svých kolegů/kolegyň.
     
Stále se mi potvrzuje, že člověk se učí celý život, pokud si nechce nechat ujet vlak.
     
Ještě jednou vřelé díky za profesionální přístup. :) =) :)

#3 Re: Calc » Makro - Načtení externích dat - "VYŘEŠENO" » 7. 2. 2023 10:56:28

Nerozumíme si. Uváděná data jsou pouze ukázková. "Item" je druh materiálu. V našem systému máme cca 5 000 druhů materiálu, 2 hlavní dodavatele a různé zákazníky. Neřešte, prosím, "anglické i české výrazy". Dnes komunikujeme s některými zahraničnímu firmami v češtině a naopak v angličtině se zahraničními.
1-2 týdně stahuji aktuální informace z webu na základě poptávek. Je nás více a v celkovém součtu ztrácíme zbytečně čas. Proto jsem uvažoval o makru.
Ve zdrojovém souboru se nemění hlavička, ale obsah dat podle požadavku. Položka "Item 1" je sice jedinečná, ale to neznamená, že ve zdojových datech je vždy. Použití funkce IFS je v tomto případě nepoužitelné.
Napadlo mě toto řešení na základě ad 3):
Udělám si šablonu, kde budou 2 řádky s čísly pro seřazení sloupců (v obou bude stejný počet čísel, jen pořadí jiné, aby sloupce, kde potřebuji upravit formát dat byly v matici) a do listu "Dodavatel" zkopíruji vstupní data a vložím 2 řádky s čísly. Zbytek by snad šlo řešit makrem v listu "Dodavatel":
1) seřadit sloupce podle řádku č. 1
2) zjistit počet neprázdných buděk v A4:A5000 (= např. "pocet_PN")
3) opravit formát buněk v matici B4:K"pocet_PN" na formát "číslo", záměna "," za ".", např. nyní 2,500 (výsledek 2500), formát buňky je text
4) opravit čísla v matici M4:V"pocet_PN" - záměna tečky za čárku, např. cena = 0.08536 (výsledek 0,08536)
5) vymazat řádek č. 1
6) seřadit sloupce podle řádku č. 1 (původně č. 2)
Dle tohoto postupu si můžu nahrát jednotlivá makra a pak je spojit. To ale nebude ideální.
Pomůžete mi, prosím?  Opravdu nám to ušetří to čas.
Pokud ano, upravím testovací data.
Děkuji.

#4 Re: Calc » Makro - Načtení externích dat - "VYŘEŠENO" » 5. 2. 2023 11:00:32

Díky za Vaši reakci. Nechci Vás zbytečně zdržovat, ale potřebuji pomoc.
1) Nepotřebuji "opravit, vytáhnout a porovnat s hodnotami jiného zdroje."
Potřebuji do prázdného listu zkopírovat potřebné sloupce ze souboru "Dodavatel.xls".
Prázdné sloupce v souboru jsou data, která nepotřebuji, proto jsem je vymazal. Celkem je tam 176 sloupců.
Nejedná se o "nesprávný import z nějakého CSV". Data stahujeme z webu dodavatele.
Položky (=druh zboží) ve sloupci A "Item 1 - 10" jsou jedinečné.
Buňky "Quantity 1" až "Quantity 10" jsou množstevní limity s odpovídající cenou "Price 1" až "Price 10".
Ostatní sloupce mají víceméně informativní charakter.
Výsledkem by mělo být pouze 29 sloupců - viz soubor Test.ods
https://drive.google.com/file/d/127A5WW … sp=sharing
V listu "Kalkulace" jsou chyby, které se snažím odstranit úpravou vstupních dat.
   
2) K "Přes to je také znát, že vzorce asi nepoužíváte tak efektivně, jak byste mohl."
Možná máte pravdu. Třeba mi poradíte, jak to zrychlit. Používám tento vzorec (příklad) pro načtení dat do listu Dodavatel1:
=VLOOKUP($A2;'file:///C:/Users/Eddie/Downloads/SynologyDrive/Calc/Dodavatel1.ods'#$'Sheet 1'.$E$2:$EA$5000;MATCH("Quantity 1";'file:///C:/Users/Eddie/Downloads/SynologyDrive/Calc/Dodavatel1.ods'#$'Sheet 1'.$E$1:$EA$1;0);0) - soubor *.xls ukládám do *.ods (soubor je výrazně menší, formát *.xls mi dělal problémy)
a pak v dalším listu upravuji zobrazení čísla (Quantity):
=VALUE(SUBSTITUTE(VLOOKUP($A2;$Dodavatel1.$E$2:$Dodavatel1.$EA$5000;MATCH("Quantity 1";$Dodavatel1.$E$1:$Dodavatel1.$EA$1;0);0);",";""))
   
Předpokládál jsem, že jednorázové načtení dat makrem výrazně ušetří čas. Mění se sortiment zboží, množství a ceny.
Nejsem si jist, že cca 150 tisíc vzorců (29 sloupců x 5 000 řádků) na jednom listu bude rychlejší než makro.
 
3) Napadlo mě zjednodušení bodu 1. a 2. zadání.
Do aktuálního ceníku zkopíruji všechny data, vložím prázdný řádek pod Hlavičku tabulky a z pomocného listu do tohoto prázdného řádku zkopíruji řádek, kde v bude parametr např. "AAA" u sloupců, které se smažou makrem (nebo naopak, které zůstanou a ostatní se smazali). Nevím, co je jednodužší.

#5 Calc » Makro - Načtení externích dat - "VYŘEŠENO" » 5. 2. 2023 07:46:27

Eddie60
Odpovědí: 7

Dobrý den,
zkouším dohledávat data pomocí funkce VLOOKUP v kombinaci s MATCH, SUBSTITUTE, VALUE ze 2 externích souborů.
Trvá to dlouho a při přepnutí do daného listu opět čekám, než se data zobrazí.
Vstupní data mají až 10 tisíc řádků a až 50 sloupců. Ne všechny sloupce potřebuji.
Makrem by to mělo být rychlejší. Bohužel s ním nemám velké zkušenosti.
   
Zadání:
1. po spuštění makra dotaz na externí soubor (formátu XLS) a případně výběr listu (může jich být více).
2. do aktuálního listu import sloupců dle jejich názvu "PN","Text AAA", "hmotnost", "Popis AAA", "Popis BBB", "Unit Quantity","Minimum Order Quantity", "UOM", "Box Quantity",
"Quantity 1", "Price 1" až "Quantity 10" a "Price 10". Ne všechny buňky musí obsahovat data.
3. Oprava formátu buněk ve sloupcích "*Quantity*" na formát "číslo", záměna "," za ".", např. "Box Quantity" = 2,500 (správně 2500), formát buňky je text
4. Oprava formátu čísel ve sloupcích "*Price*" - záměna tečky za čárku, např. cena = 0.08536 (správně 0,08536)
5. setřídění dat dle "PN" (sloupec A)
Výsledkem by měl být seznam bez prázdných sloupců.
   
Upravený zdrojový sešit je zde.
https://docs.google.com/spreadsheets/d/ … ue&sd=true
Děkuji.

#6 Re: Calc » Vnořené funkce - ošetření chyby 502 - "VYŘEŠENO" » 4. 2. 2023 18:52:07

Děkuji za rychlou odpověď.
Fungují obě varianty. Super.
Díky.

#7 Calc » Vnořené funkce - ošetření chyby 502 - "VYŘEŠENO" » 4. 2. 2023 17:54:20

Eddie60
Odpovědí: 2

Dobrý den,
rád bych vás požádal o pomoc.
 
Ve zdrojových datech jsou špatné formáty dat, např.:
množství = 2,500 (správně 2500), formát buňky je text
cena = 0.08536 (správně 0,08536), formát buňky je číslo
 
V minulosti jsem nejdříve zdrojová data upravil a následně s nimi pracoval.
V původních datech je až 5 tisíc řádků a cca 50 sloupců. Ne všechny sloupce potřebuji.
Celý proces je potřeba urychlit pomocí vzorců.
 
Běžně k vyhledávání používám tento vzorec:
=VLOOKUP($A2;$list3.$E$2:$list3.$EA$5000;MATCH("Quantity 3";$list3.$E$1:$list3.$EA$1;0);0)
zobrazí se hodnota "2,500", kterou je nutno upravit na správný formát (pro další výpočty):
=VALUE(SUBSTITUTE(VLOOKUP($A2;$list3.$E$2:$list3.$EA$5000;MATCH("Quantity 3";$list3.$E$1:$list3.$EA$1;0);0);",";"")
Vzorec funguje, ale když je buňka prádná, zobrazí se chyba 502.
   
Potřebuji, aby výsledek byl v tomto případě "9999999" (pro další podmínky ve vzorcích), což se mi nedaří. Někde dělám chybu.
=IF((ERROR.TYPE(502);9999999;VALUE(SUBSTITUTE(VLOOKUP($A2;$list3.$E$2:$list3.$EA$5000;MATCH("Quantity 3";$list3.$E$1:$list3.$EA$1;0);0);",";""))).
Vždy se mi zobrazí výsledek "# N/A", i když buňka není prázdná.
Děkuji.

#8 Re: Calc » VLOOKUP - změna oblasti pro vyhledávání - VYŘEŠENO » 1. 2. 2023 22:27:10

Super, až na malou chybičku ve vzorci, kterou jsem opravil (místo "," má být ";"), vše funguje.
=VLOOKUP($A2;$Data_2.$A$2:$Data_2.$C$13;match("jmeno sloupce"; $Data_2.$A$1:$Data_2.$C$1;0);0)
Děkuji za pomoc.

#9 Calc » VLOOKUP - změna oblasti pro vyhledávání - VYŘEŠENO » 1. 2. 2023 15:55:33

Eddie60
Odpovědí: 3

Dobrý den,
po delší době se na vás obracím se žádostí o pomoc.
   
Velmi často používám fukci VLOOKUP s jedním (někdy i více parametry) pro vyhledávání.
Vše funguje bez problémů do okamžiku, kdy do vyhledávací oblastí přidám/odstraním sloupec.
Tím se změní hodnota Indexu a zobrazí se jiné údaje (viz odkaz; listy "Data_2" a "list2").
Je to velmi zjednodušený příklad. Používám až 10 listů (v některých až 50 sloupců).
   
https://drive.google.com/file/d/15YgAfZ … share_link
   
Lze tuto situaci nějak ošetřit?
   
Zaregistroval jsem, že u vzorců s odkazem na jiný list musím používat absolutní hodnotu i u názvu listu
(např. "=VLOOKUP($A2;$Data_2.$A$2:$Data_2.$C$13;3;0)"), aby nebyl problém při kopírování listu s vložením na začátek/konec.
Není to chyba? Názvy listů jsou snad jedinečné.
Děkuji.

#10 Re: Calc » Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO » 3. 4. 2022 13:55:19

Ano, chtěl bych, aby v hlavičce bylo číslo max. 12.
První červený řádek s hlavičkou jsem doplnil ručně, aby byl vidět výsledek makra. 
Jinak makro funguje perfektně.
Děkuji.

#11 Re: Calc » Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO » 3. 4. 2022 12:39:23

Do souboru jsem doplnil hlavičku (červeně), která vznikne po ukončení makra na plných datech.
https://drive.google.com/file/d/1DMJwL7 … sp=sharing
To jsem měl na mysli.

#12 Re: Calc » Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO » 3. 4. 2022 09:52:48

Makro funguje rychle (cca 3,5 min) a dobře až na hlavičku, kde je 377x "Počet_x" a "Cena_x" (u cca 80 tis. řádků). Dá se to jednoduše ošetřit?
Pokud ne, tak to tak necháme. Hlavička se dá rychle upravit.
Děkuji.

#13 Re: Calc » Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO » 2. 4. 2022 19:31:04

Nejdříve na vysvětlenou. Jednotka a měna má pro nás informativní charakter. Pro jeden materiál jsou vždy stejné pro daný ceník.
Na základě Vaší odpovědi jsem upravil vstupní tabulku a pokusil se také upravit i makro (viz Cenik_sloupce_zadání_2.ods).
https://drive.google.com/file/d/1-U7xLS … sp=sharing
Snažím se pochopit, jak makro funguje a taky jsem nechtěl, aby jste ztrácel další čas.


Makro v tomto případě funguje bez problémů, počet opakování materiálu je max 12 a v "List2" je počet párů sloupců "Počet" a "Cena" taky 12.


1) Problém nastává u celého objemu dat u cca 80 tis. řádků (počet různých 8965, max opakování 6), kdy v hlavičce je 377 párů sloupců. 377 je hodnota "opak".
Počet opakování jednoho materiálu může být max. 12.
Pozitivní je, že konverze ceníku do řádků nyní proběhne celá v rozmezí 3-3,5 min, což je super.

2) V listu "vystup_Cíl" jsem přesunul sloupce "Jedn." a "Měna", aby se kopírovali pouze 1x.
Nevím, jak upravit makro.

#14 Re: Calc » Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO » 1. 4. 2022 19:43:30

Práva jsem opravil
https://drive.google.com/file/d/1d3rKPu … sp=sharing


Na základě Vaší odpovědi mě napadlo toto řešení:
Sloupce Jednotka a Měna jsou pro 1 položku vždy stejné, mohli by se zkopírovat pouze jednou za sloupec "Materiál".  Pak by smyčka (opakování) byla pouze na Množství a Cenu.
Bude to takto fungovat?

Pokud ne, rozdělím soubor na 2 části a pak data spojím.
Jedná se o největší počet řádků (do 40 tisíc).
Zpravidla pro tento typ převodu mám menší počet řádků.
Snažím se najít řešení, které bude fungovat delší dobu.
Formát dat není rozhodující, pokud to zrychlí makro. Formát dat se dá velice rychle dodělat.

#15 Re: Calc » Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO » 1. 4. 2022 16:58:40

Změnil jsem hlavičku dle doporučení na:
"Sub hlavicka(ByVal opak as long)
print opak"

Vyskočilo hlášení s číslem 377 a následně stejná chyba (chyba_2a.jpg)
https://drive.google.com/file/d/1d3rKPu … sp=sharing


Vzhledem k tomu, že do originálního souboru "Cenik_sloupce_úprava3.ods" jsem jsem nakopíroval do listu "vstup" pouze nová data od ř. 2, opravil hlavičku makra dle doporučení, výsledek byl tento:
20 tis. řádků - chyba 2a;
15 tis. řádků - makro proběhne;
jsem začal hledat jinde a napadlo mě zkontrolovat verzi SW.
Měl jsem LibreOffice v. 7.3.0.3 (progresivní) a tak jsem ji nahradil v. 7.2.6.2 (stabilní)
Makro u 20 tis. řádků nyní proběhne, ale u 38 tis. řádků se objeví stejná chyba.
Nechápu.

#16 Re: Calc » Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO » 31. 3. 2022 17:41:20

Otestoval Ceník_úprava3. Chyba přetečení se neobjevuje, ale objevuje se opět chyba:
"BASIC - chyba při běhu.
Vyskytla se výjimka
Type: com.sun.star.lang.IndexOutOfBoundsException
Message: ." - viz
https://drive.google.com/file/d/1A-vP1Q … sp=sharing
Pokud nechám v souboru cca 1000 řádků, konverze proběhne. U 1500 řádků již nikoli.


Zrychlení makra není nutné. I kdybych to dělal 1x denně, ušetří mi to spoustu času.

#17 Re: Calc » Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO » 30. 3. 2022 18:36:24

Děkuji za řešení pomocí vzorců, které je pro max. 150 řádků.

Testoval jsem makro (Ceník_úprava1). Pokud je v souboru cca 15 tisíc řádků (počet různých 3085, max opakování 6), konverze trvá cca 2min 15s.
Celý soubor má přes 38 tisíc řádků a při spuštění makra se objeví chyba "Nepřípustná hodnota či datový typ.
Přetečení." Otevře se okno s makrem a zvýrazní se řádek "Lrow = PosRow - 1" -viz chyba_1.jpg.
https://drive.google.com/file/d/1Ar1HcQ … sp=sharing
Myslel jsem, že je chyba ve vstupních datech, tak jsem soubor rozdělil na 2 části a při cca 15 tis. řádků makro funguje.
Po vymazání prvních 15 tis. řádků (zůstalo 23 tis. řádků) se objevuje chyba: "BASIC - chyba při běhu.
Vyskytla se výjimka
Type: com.sun.star.lang.IndexOutOfBoundsException
Message: ."
Pokud jsem 23 tis. řádků opět rozdělil na 2 části, makro proběhlo v pořádku.

#18 Re: Calc » Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO » 28. 3. 2022 05:43:03

Máte pravdu. Spuštění makra pomocí hlavní nabídky OVLÁDÁNÍ CENÍK funguje bez problémů. Mám taky Win7.

#19 Re: Calc » Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO » 27. 3. 2022 20:35:35

Pokud makro spustím přes Nástroje - Makro - Spustit a zvolím makro a dám spustit, objeví se chyba:
"Při běhu Basic skriptu Standard.Module1.hlavicka došlo k chybě skriptovacího rozhraní.
Zpráva: wrong number of parameters!"

Pokud makro spustím přes Nástroje - Makro - Upravit makra - kliknu na tlačítko Spustit, vyberu makro a spustím ho, makro proběhne v pořádku a výstup odpovídá zadání.

#20 Re: Calc » Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO » 27. 3. 2022 10:06:23

Tady je odkaz na požadovaný soubor, kde je v jednom listu je vstup a v dalším listu požadovaný výstup:
https://drive.google.com/file/d/1HYHNEY … sp=sharing
Nejde o opakovaný dotaz. Řešil jsem konverzi ceníku v řádcích do sloupců.
Nyní bych to potřeboval naopak.

#21 Re: Calc » Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO » 26. 3. 2022 17:20:43

Dobře, pak tedy zadání zjednoduším, bude pouze 5 sloupců. Zbytek dat si doplním dle potřeby pomocí funkce VLOOKUP.
Bohužel, počet řádků se stejným materiálem je různý v rozsahu 1-12.
Celkový počet řádků může být do 50 tisíc.
Struktura je tato:
Materiál    Počet    Jedn.    Cena    Měna
materiál_0    5000    ks    0,038    EUR
materiál_1    1    ks    0,936    EUR
materiál_1    50    ks    0,795    EUR
materiál_1    100    ks    0,777    EUR
materiál_1    500    ks    0,53    EUR
materiál_2    50    m    1,246    EUR
materiál_2    100    m    1,094    EUR
materiál_3    1    l    0,877    EUR
materiál_3    50    l    0,77    EUR
materiál_3    100    l    0,662    EUR
materiál_3    250    l    0,615    EUR
materiál_3    500    l    0,574    EUR
materiál_3    1000    l    0,538    EUR

Potřeboval bych převést data do nového listu tak, aby na jednom řádku u stejného materiálu byly všechny údaje (Počet, Jedn., Cena a Měna).
Předpokládal jsem, že řešení makrem by mělo být nejrychlejší.
Nebo to lze řešit jinak a jednodušeji?
Děkuji.

#22 Calc » Jak zkonvertovat ceník s cenami ve sloupcích do řádků? - VYŘEŠENO » 26. 3. 2022 11:34:52

Eddie60
Odpovědí: 25

Dobrý den,
opět se bych Vás rád požádal o pomoc s konverzí ceníku, kdy ceny jsou ve sloupcích, pomocí makra.
Měla by to být obdoba "Jak zkonvertovat ceník s cenami v řádcích do sloupců?" s tím, že makro bych chtěl používat univerzálně.

Zadání:
- 1. řádek je vždy záhlaví
- záhlaví může být různě dlouhé (v tomto případě např. 14 buněk)
- rozhodující pro konverzi je sloupec A = Materiál
- počet řádků s jedním materiálem může být různý
- počet defaultních sloupců se stanoví pomocí dotazu (okna) nebo napevno (v tomto případě "4" = sloupce A-D)
-

A               B        C    D     ...  K       L        M
mater_1   ks       1    US    ...  10    16,00  12,5
mater_1   ks       1    US    ...  30                11,75
mater_1   ks       1    US    ...  100   14,0     11
mater_1   ks       1    US    ...  1000  8,00   
mater_2   ks       1    CZ    ...  1       6,00
mater_2   ks       1    CZ    ...  10    4,0        1,5
mater_2   ks       1    CZ    ...  50    2,00

Makro by mělo fungovat takto:
1) do nového listu "Radky" zkopíruje záhlaví tabulky (např. 14 buněk zleva), včetně formátu
2) dotaz na počet defaultních sloupců (=ty se zkopírují na řádek pouze jednou), nyní např. A-D
3) stanoví se "blok" dat, který se bude vždy kopírovat, záhlaví 14 - 4 (default) = 10 buněk, např. E-M
4) zkopíruje obsah buněk E2:M2; E3:M3; E4:M4; E5:M5 na stejný řádek (výsledkem bude na řádku s materiálem 
mater_1 44 zkopírovaných buněk.
5) opakuje se bod 4) pro další jinou hodnotu ve sloupci A (mater_2, ...)

Předpokládám, že by to mohlo jít.
Děkuji.

#24 Re: Calc » Jak zkonvertovat ceník s cenami v řádcích do sloupců? - VYŘEŠENO » 15. 2. 2022 18:03:38

Tak to je skvělé. Makro je velmi rychlé.
Ještě jedna drobnost.
Nedaří se mi v nápovědě dohledat NumberFormat pro €/EUR (125,55 € / 125,55 EUR)
Sloupec.NumberFormat=102 '102=měna 1234,50 Kč

#25 Re: Calc » Jak zkonvertovat ceník s cenami v řádcích do sloupců? - VYŘEŠENO » 15. 2. 2022 14:10:46

Ano, ale včetně 1. řádku: Material  Jednotka Rate    Qty1  Cena1
Stačí mi zkopírovat pouze hodnoty.
Seřazení všech dat na závěr dle materiálu a množství jsem neuváděl.
To už mi nezabere tolik času.

Zápatí

Používáme FluxBB