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

#1 5. 3. 2014 22:46:41

meda
Člen
Registrace: 5. 3. 2014
Příspěvků: 3

kopírování mezi soubory - makro

Dobrý den,

potřebuji udělat jednoduchou aplikaci na inventuru a potřebuji poradit s problémem, ohledně kopírování dat z jednoho souboru do druhého souboru.

Konkrétní problém je tento:

V souboru "den" vyplním datum a dále u každého zboží vždy 3 údaje (náš princip inventury), následně bych potřeboval, aby se po stisknutí tlačítka tyto údaje překopírovaly do souboru "prekopirovane", ale tak, že vždy do nových prázdných sloupců (snad je to z přiloženého souboru poznat jak to myslím). A aby se po odeslání mohl vymzat obsah souboru "den", ale v souboru "prekopirovane" aby údaje zustaly.

Doufám, že jsem to řekl alespon trošku srozumitelně.

soubory: http://ulozto.cz/xaKY6e8m/rada-rar

P.S. Případně pokud někdo má nějaký soubor na inventuru pro stánkový prodej (zboží nejde přes čárový kod a není tak možná automatická inventura), klidně jsem ochoten za rozumnou cenu tento soubor odkoupit. Pokud možno v OpenOffice.

P.S.2. Pokud má někdo zájem, můžeme se domluvit na výrobě tohoto souboru přímo na míru. Pokud se někdo této rpoblematice věnuje, určitě mě kontaktujte a můžeme se domluvit, že bych si u vás tento soubor nechal kompletně udělat.

Editoval meda (5. 3. 2014 22:48:25)

Offline

#2 6. 3. 2014 06:50:46

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

Re: kopírování mezi soubory - makro

Žádný velký problém. Jde spíš o detaily.
- Jedná se o inventury mezi různými prodavači?
- Mělo by se vyhodnotit také rozdílové množství a ceny?
- Bude (má být) soubor "překopírované" přístupný tomu kdo inventuru dělá?
- Mají mít stejné položky zboží vždy stejný řádek?
- Má se vyhodnocovat například trvanlivost (doba spotřeby)?
- Je položek hodně - řádově více nežli desítky - má se sledovat předpoklad vyprodání?
- Mohou prodavači přebírat zboží od dodavatelů a zavádět nový druh nebo jinou cenu?
- Má se vyhodnocovat tržba - popřípadě (převzetí zásob + nákup nových - tržba)?
     Jde sice o detaily - ale může jich být milion. Zejména pokud by se jednalo například o potraviny, kde je potřeba také někdy fofrem zlevnit a přednostně vyprodat. Pak správně načasovat dodávku čerstvého sortimentu a ohlídat aby to prodavač nezneužil.
     Jinak asi bude probíhat předání směny s režimem jako mají hospody, a jinak stánek se zeleninou, kde se po týdnu střídá rodina.


     To vlastní makro - nebo jeho nějaká podoba tady bylo už vícekrát. Jde asi jen o ty detaily a o to, zda se má kopírovat do skrytého souboru, popřípadě do zaheslovaného. V podstatě jde asi o to, zda je potřeba inventuru jako předávací protokol mezi směnami z "cizích" prodavačů. Tedy začátek směny - konec směny shodný za přítomnosti obou směn - nebo jen stav na konci směny - bez vyhodnocení začátku.
     Je možné například ráno zboží navézt - prodavač prodá a co neprodá vezme domů. Druhý den přijde jiný prodavač, který má také z minula nějaké zboží a ráno se mu jen doplní a on pak také odevzdá tržbu za svůj předchozí prodej ap.... Prostě mnoho variant.

      Někdy bude zájem si předání i nafotit - stačí mít zboží správně srovnané a nikdo nepochybuje, což může být zejména v předávce typu "hospoda" velmi sporné. Malé zboží může být vybaveno jen pro účely dokumentace cedulkou (300 ks žvýkaček...). Oba prodavači fotkou (každý svou) potvrdí, že údaj na cedulce je správný. Odeslání sešitu ke kopírování.
      Jinak by asi vypadala "stop inventura" - kontrola stánku zda si prodavač nepřilepšuje na úkor zaměstnavatele, nebo zda nešidí zákazníky. To všam by mělo zapadat do celkové koncepce inventur nejlépe tak, aby to přijal i kontrolní orgán. Může to rozhodnout o tom, kdo dostane pokutu, zda jen prodavaš, nebo prodavač i firma, nebo jen firma. Kontrolní orgány by raději viděly pokladnu - ale v plátěném, nebo igelitovém stánku a elektronika určená do vnitřních prostor? Noťas, nebo tablet bez problémů.


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

#3 6. 3. 2014 08:26:35

meda
Člen
Registrace: 5. 3. 2014
Příspěvků: 3

Re: kopírování mezi soubory - makro

Dobrý den,

pokusím se Vám dopovědět na váš dotaz.

Jedná se o inventuru pro stánkový prodej, respektive jde o stánek ve vodáckém kempu.

Aplikace na inventuru by nám měla být schopna pohlídat, jestli tržba odpovídá +- prodanému zboží, měla by umět vypsat určitou sestavu o počtu prodaného jednotlivého zboží a také by měla umět vypsat aktuální stav skladu.

Naše myšlenka je následující:
Zaměstnanci po směně vyplní připravený formulář, kde bude přednastaveno všechno zboží které v kiosku máme (počítejme cca 100-200 položek (jídlo, alkohol, cukrovinky, nanuky atd...)). To by byl soubor "den", provozní zároveň do jiného souboru zadá denní tržbu, do dalšího souboru zadá dodané zboží od dodavatelů.

Detaily co má jednotlivý soubor umět, bych určitě dodal.

Ještě by byl soubor "sortiment" kde by budou veškeré údaje o daném zboží (nákupní cena, prodejní cena, počet ks v balení atd..).

Pomocí makra se toto vše překopíruje do souboru, do kterého bude přístup pouze pod heslem, a ve kterém budou probíhat veškeré matematické výpočty.

Další soubor by právě měl umět udělat tisk sestav z tohoto zaveslovaného souboru. Nebo-li po stisknutí tlačítka "finance" by měl umět ve vybraném období vypsat porovnání tržby a prodaného zboží. Po stisknutí "Prodej" by měl umět vypsat za nějaké období počet prodaného zboží.

Dobré by také bylo, aby ze souboru "sortiment" šlo vypsat určité zboží, pro hledání výhodnější koupě. nemůžeme si pamatovat, všechny položky. Řeknu příklad: budeme kupovat sud kofoly u jedné firmy za xx kč a v letáku jiného velkoobchodu bude najednou za yy kč, tak aby jsme jenom nechali vypsat cenu kofoly a mohli to porovnat.
 
Vím že je to jenom takový hrubý náznak a jak říkáte je tam mnoho detailů, ale ty se spíše budou lépe ukazovat v rozdělané práci, jestli mi rozumíte jak to myslím.

jak jsem říkal, matematická stránka věci není žádný problém, nechceme to ovšem mít všechno v jednom souboru kde bude mraky listů, chceme aby to bylo přehledné.

nemusí se hlídat trvanlivost (většina věcí má trvanlivost na celé období prodeje) ani nemusí být aplikace přizpůsobena na slevu.

Offline

#4 6. 3. 2014 10:55:35

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

Re: kopírování mezi soubory - makro

Ano rozumím. O to je to snadnější. Předpokládám tedy, že tam nebude prodej váženého zboží, ani rozlívání nápojů. Prodej jen kusů, nebo rozlívání (čepování) na vlastní triko prodavače. Přes to se asi stane, že konec dne se začátkem následujícího nebude souhlasit a mohou vzniknout spory. Důvodů může být více. Například Vám někdo kiosek vykrade, nebo jeden ze střídajících se prodavačů udělá nechtěnou chybu, či dokonce podvod na kolegu. Ne vždy bude moci skutečný stav garantovat provozní. Při tom podle všeho nebude prováděno předávání ze směny na směnu - mezi směnami bude proluka. Potřebou je potvrdit počáteční stav a pak konečný tím samým prodavačem. Máte konkrétní představu co se stane, když prodavač převezme nové zboží, které již na stánku má, ale za jinou cenu? Samozřejmě bych se právě o tohle zajímat nemusel, ale Vy byste na to stejně asi narazili jako naproblém. Takových věcí je poměrně dost. Napíšu jen náznakově o co jde:
- Prodavač převezme nové zboží, potvrdí příjem, ale neměl by zboží pustit do prodeje bez provozního kvůli přecenení. Nechá to v kiosku v krabicích a ráno provozní zjistí, že krabice jsou napolo, nebo zcela vybrané. Prodavač který to přebíral bude tvrdit, že si ničeho nevšiml - a že bylo vše v pořádku když odcházel. Ráno už tam nejspíš bude další prodavač, a ten bude tvrdit, že na to ani nesáhl.
- Podobná situace, jen původní prodavač uvede jiný stav, nežli "shledá" ten další. Manko budou házet jeden na druhého, nebo na provozního, který bude mít asi logicky také klíče.
- Hloupý prodavač si přinese své vlastní zboží (nesouhlasí s oficiálním sortimentem) a bude "rejžovat". Chytrý prodavač bude "rejžovat" jen na svém zboží, které je stejné, jako to dodané oficiálně. Stačí mu v létě 1 krabice nanuků a 10 Pet-lahví 1,5 lt piva? Co takhle malinkaté věci jako kondomy, cigarety a podobně?
- Co takhle záměna gramáží - například sušenky a bonbóny s různým, ale velice podobným obsahem. Jeden karton pak jednou bude obsahovat třeba 60 kusů a jiný jen 40 - ale větších.


     Jednoduše si myslím, že těch kolonek je potřeba více. Řešením jiného typu je registrační pokladna - a může to být i starý typ, který nemá elektronický výstup. Důležité je to, aby všichni věděli, že musí dát lístek z pokladny. Při manku se dá kontrolní páska naskenovat stolním skenerem a přes OCR vložit do Calcu - ale i stará pokladna něco stojí - udržba, páska ap. Jsme u HW.
     Jak to budou prodavači zadávat? Notebookem? Mají tam něco se síťovým propojením? Tedy může tam být i starší stroj jen Off-line a je možné to přenášet na flashi. Nebo to vyplní jako skutečný papír a odevzdají provoznímu ke zpracování?


      Oč se jedná: - Pokud je tam nějaký počítač, je možné vytvořit systém s hesly tak aby každý prodavač měl své vlastní stejně jako provozní. Majitel bude mít všechna hesla. Takže provozní se dostane do souborů prodavače, ale ne na souhrny. Prodavač se dostane jen ke svým souborům jako ke kopiím. To mu znemožní zpětné přepisování. Pokud by to bylo jen v Off-line provozu, bude přenášen celý klíčenkami adresář všech záznamů. To pak můžete porovnat - detaily jsou maličko složitější, ale nic co by nemohlo vyhovět každému systému provozu. Myslím, že by tam mohlo být i připojení k netu - tím by se vyřešilo plno věcí.

Editoval neutr (6. 3. 2014 10:57:02)


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 6. 3. 2014 11:51:06

meda
Člen
Registrace: 5. 3. 2014
Příspěvků: 3

Re: kopírování mezi soubory - makro

Právě kvůli inventuře (již minulý rok jsme ji dělali, ale právě pouze pomocí jednoduchého sčítání v Excelu) neměníme během sezony sortiment zboží, proto si myslím, že problém s neceněním zboží by nastat neměl.

Nyní mi nejde o to řešit moc věci okolo viny, respektive manka a čí to bude vina. Bude problém, že se v kempu střídají brigádníci a vlastně nejsou určeny žádné pevné směny (nejsme majitel, dělám pouze provozního a už jsem s majitelem o tomto mluvil, že to bude hodně divoké dělat v tomto systému inventuru). Spíše než o nějaké buzerování že chybí v kase vzhledem k inventuře 100 kč, nám jde spíše o případ kdy bude za jeden den chybět třeba i několik tisíc. Kiosek je navíc vybaven kamerovým systémem, takže když díky inventuře vytipujeme podezřelý den, můžeme si potom prohlédnout záznam jestli na něm není něco podezřelého. Také nám jde o systém pro příští rok, respektive pro příští objednávky. podívat se že minulý víkend se prodalo tolik piva a tolik klobás.

Samozřejmě během sezony se objeví mnoho much a mnoho nových problémů, které nás nikoho nyní nenapadnou. Pro letošní rok hledáme pouze nějaký dá se říci hrubý návrh a hrubé řešení, které se bude v průběhu dalších let zdokonalovat právě podle problémů na které narazíme během sezony.

Inventuru zamýšlí majitel pomocí papírového formuláře a já nebo kolega to posléze naťukáme do systému. Letos nebude mít nikdo kromě provozních a majitele k tomuto systému přístup, proto není potřeba složitě řešit zaheslování různých věcí. Potřebujeme najít ten nejlepší způsob, kterým toto zpracovávat.

Ano registrační pokladna je další možnost, v minulých letech jsem zkoušeli pokladny podobného typu jako má McDonald (dotykové atd..), ale znatelně to zpomaluje práci obsluhy. Ty 3 měsíce je to u nás opravdu frmol, a je potřeba co nejrychlejší způsob výdeje zboží z kiosku.

Myslím, že nejlepší by bylo nejdříve vyrobit nějakou základní kostru, pro letošní sezonu zatím nic extra složitého. udělalo by se pár testů a mohlo by se to případně dále upravovat.

Představa o celém schématu je následující:
http://ulozto.cz/xc347hW4/dokument1-pdf

Jestli mi rozumíte jak to myslím s tou hrubou kostrou. Vždycky se lépe diskutuje již na nějakou hotovou věcí, kde se může řešit konkrétní problém. Jestli se můžeme domluvit, že by jste mis  tím na zakázku pomohl. V jaké cenové hladině by se to tak pohybovalo?

Offline

#6 6. 3. 2014 12:01:09

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

Re: kopírování mezi soubory - makro

Myslím, že pro inventuru skladu je lepší databázové řešení, s tím ale nepomohu.


Ošetření makrem lze, ale je nutné naprosto přesně definovat, způsob jakým se mají data přenášet.

Sub prenos
dim prekopirovane as object 	
dim args(1) as new com.sun.star.beans.PropertyValue
args(0).Name = "Hidden" ' otevřeme jako skrytý
args(0).Value = True
args(1).Name = "Password" ' heslo
args(1).Value = "Heslo" ' doplňte si vaše
'zaměňte si adresu dokumentu podle vás
adresa = ConvertToURL("/home/daniel/Plocha/rada/prekopirovane.ods")
doc = thisComponent
okno = doc.currentController.Frame.getComponentWindow ' přiřazení okna dokumentu
okno.setVisible(false) ' uzavřeme okno - zrychlení makra
list_den = doc.sheets(0) ' nebo název listu - doc.sheets.getByName("List1")
' otevřeme překopírované.ods jako skrytý
prekopirovane = Stardesktop.loadComponentFromURL(adresa," ",0, args())

list_prekopirovane = prekopirovane.sheets(0)
oblast_den = list_den.getCellRangeByName("C3:E202").getDataArray ' načteme data ze souboru den.ods
' načítá se 200 řádků
datum = list_den.getCellRangeByName("E1").value ' pro daný dane
for i = 2 to 93 step 3 ' nalezneme stejné datum v překopírované.ods '
den_prekopirovane = list_prekopirovane.getCellByPosition(i,1).value ' zjištění datumu prohledáváme každý třetí sloupec
if den_prekopirovane = datum then ' pokud jsou data shodná tak
'zadefinujeme si oblast pro vložení do překopírované.ods
vloz_do_prekopirovane = list_prekopirovane.getCellRangeByPosition(i,2,i+2,201)
'vložíme celou oblast z dokumentu den.ods
vloz_do_prekopirovane.setDataArray(oblast_den)
else
endif
next i
prekopirovane.store() ' uložíme
prekopirovane.close(True) ' uzavřeme
print "PŘENOS PROVEDEN" 
okno.setVisible(True)' zobrazíme okno
End Sub

Tento kód přenese data z dokumentu den.ods do překopírované.ods. V překopírované.ods si musíte přednastavit data na celý měsíc. Nyní provádí makro test dat v rozmezí 31 dní.
Také přenese data inventury v pořadí v jakém jsou zadány ve dni.ods. Stejná struktura musí být i v překopírovaném.ods!

Co se stane, když datum chybí, má se automaticky doplnit? Má makro skončit a nahlásit chybu?
Co s novým zbožím? Je nutné neustále hlídat nové zboží, aby nechybělo. Má se provádět kontrola na toto nové zboží a pokud chybí, má se doplnit? A kam se má doplnit?
Těch otazníků je celá řada a řešení nemusí být zrovna jednoduchá.
Databázové řešení tyto problémy odstraňuje, můžete se inspirovat v seriálu p. Svobody Práce s databází - Base z OpenOffice.
Na druhou stranu s Base má zkušenost jen velmi málo lidí, zatímco s makry vám můžeme pomoci.


;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

#7 6. 3. 2014 12:27:55

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

Re: kopírování mezi soubory - makro

Ano to už podle obrázku vypadá celkem koncipovaně. Vlastní makro pro kopírování není problém. Ovšem co, kam a proč kopírovat musí být zřejmé - nyní už představu mám. Můžeme se domluvit. Znám i problematiku jako takovou a dokonce současně něco podobného pomáhám řešit jednomu kamennému obchodu. O peníze jde až první řadě - dáte mi na pivo až když se Vám to (jestli se to) bude líbit :-)

Editoval neutr (6. 3. 2014 12:28:35)


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

#8 13. 2. 2017 14:01:42

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 105

Re: kopírování mezi soubory - makro

Dobrý den
Prosím o radu:
mám dva soubory, jeden jako hlavní - jedno z maker otvírá druhý soubor, který je zdrojem a editorem dat a obsahuje makro pro přenos dat do hlavního sešitu. Problém spočívá v tom, že při ladění mi obě makra šla správně (podmínky vypsány):
hlavní souubor otevřen, otevřený dialog
datový soubor otevřen ručně z OO, funkční
makro pro přenos dat spojeno s tlačítkem na liště, data překopíruje, makro projde korektně (ověřeno krokováním)


Pokud vše pustím v ostrém provozu (podmínky vypsány), makro pro přenos dat se nespustí
hlavní souubor otevřen, otevřený dialog
datový soubor otevřen makrem z hlavního, stav OK
makro spojeno s tlačítkem na liště, makro se nespustí, OO na příslušné makro vůbec neskočí (ověřeno krokováním)

zde makro pro otevření datového souboru
Sub sort_Fread
    Fondy = thisComponent
    Strana_1 = fondy.sheets(1)
    Strana_2 = fondy.sheets(2)
   
    dim sURL as string
    dim Market_data as object
    srcURL = "E:\Users\Tata\Documents\Penize\3_Fondy_RB\Market_data.ods"
    convURL = ConvertToURL(srcURL)
    infobox = sort_base.getcontrol("infobox_sort")
     dim oDoc as object, eDocs as object
        set eDocs = StarDesktop.Components.CreateEnumeration
    Strana_2.getcellrangebyname("A6").value = 0
    do while eDocs.hasMoreElements
        set oDoc = eDocs.NextElement
        if oDoc.ImplementationName="ScModelObj" and ConvertFromURL(oDoc.URL) = srcURL then
            Strana_2.getcellrangebyname("A6").value = 1
    endif   
    loop
    if Strana_2.getcellrangebyname("A6").value = 0 then
        Market_data_file = StarDesktop.loadComponentFromURL(convURL," ",0,Array())
    endif
    str1 = "Soubor dat obchodů je otevřen - proveďdte aktualizaci"
end sub

zde makro pro přenos dat (uloženo v knihovně "Standard" jako dokumentové makro
sub Send
    Market_data = thisComponent
    StarDesktop.Frames("Fondy_RB_17-02-06.ods - OpenOffice Calc").activate
    Fondy = StarDesktop.getCurrentComponent()
    Strana_0 = Market_data.sheets(0)
    row_act = Strana_0.rows
    row_act.removebyindex(0,1)
    src_data = Market_data.Sheets(0)
    Market_data.Currentcontroller.select(src_data)
    packet = Market_data.CurrentController.getTransferable()
    Target_arrea = Fondy.Sheets(1).getCellRangeByName("A1")
    Fondy.CurrentController.select(Target_arrea)
    Fondy.CurrentController.insertTransferable(packet)
end sub

Děkuju Martin

Offline

#9 14. 2. 2017 10:09:54

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 408

Re: kopírování mezi soubory - makro

Mám stejný "problém". Jakmile otevřu soubor makrem, pak v něm obsažená makra nelze spustit. (LO 5.2.2.2, win 7). Ale jak z toho ven to nevím, zas tak mě to netrápí, jen jsem si toho všimnul. Možná zkoušet různé způsoby otvírání ...

Offline

#10 14. 2. 2017 10:29:01

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 105

Re: kopírování mezi soubory - makro

Ještě jsem vydedukoval tohle: Když se dostanu přímo na text makra pokusím se ho spustit v testovacím módu, objeví se hláška "z bezpečnostních důvodů nelze spustit toto makro, ověřte nastavení bezpečnosti". Zabezpečení makra jsem zkoušel i na nejnižší stupeň, je možné, že to bude vyžadovat zapsání makra do seznamu bezpečných nebo nějaký certifikát - to moc nedávám.
Martin

Offline

#11 14. 2. 2017 10:40:52

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 105

Re: kopírování mezi soubory - makro

Způsoby otvírání - to by tam musel být nějaký parametr na povolení maker a je mi divné, že by implicitní hodnota byla zakázat - a že by po otevření nevyskočilo nějaké upozornění typu - "makra nejsou povolena".
M

Offline

#12 14. 2. 2017 10:47:16

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 408

Re: kopírování mezi soubory - makro

Marrtt napsal(a)

Způsoby otvírání - to by tam musel být nějaký parametr na povolení maker a je mi divné, že by implicitní hodnota byla zakázat - a že by po otevření nevyskočilo nějaké upozornění typu - "makra nejsou povolena".
M

Je to tak mrknite sem: https://wiki.openoffice.org/wiki/Docume … tarDesktop

MacroExecutionMode (Integer)
    indicates if document macros may be executed. Values : see com.sun.star.document.MacroExecMode

A dejte pak vědět řešení. Díky :-)


konstanty a jejich významy zde: http://www.openoffice.org/api/docs/comm … cMode.html

Editoval ludviktrnka (14. 2. 2017 10:50:17)

Offline

#13 14. 2. 2017 11:01:54

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 408

Re: kopírování mezi soubory - makro

Jo je to přesně ono, u mě už to fachčí:

dim argum(0) as new com.sun.star.beans.PropertyValue   	
argum(0).Name = "MacroExecutionMode"
argum(0).Value = 4
secDoc = starDeskTop.LoadComponentFromURL(file,,0,argum())

Offline

#14 14. 2. 2017 11:06:51

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 105

Re: kopírování mezi soubory - makro

Tak z toho teda chytrej nejsem; zaprvé mám bohužel trochu handicap v AJ (za mejch mladejch let se učila jen ruština, takže jsem jazykově bohatě vybaven na příjezd Kozáků). Zadruhé je ta wiki pro mě dost nesrozumitelná a nevidím tam příklad praktického použití. Takže pořád chodím kolem chaloupky a nevidím dveře...

Offline

#15 14. 2. 2017 11:10:08

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 105

Re: kopírování mezi soubory - makro

Bomba!!!
až budete v Praze, máte u mě pivo!!

Dík

Offline

#16 14. 2. 2017 13:10:53

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 408

Re: kopírování mezi soubory - makro

Já bych se taky rád zeptal. Vy pomocí této metody:
packet = Market_data.CurrentController.getTransferable()
Fondy.CurrentController.insertTransferable(packet)

přenášíte obsah celého listu? Jak je to rychlé? Kolik toho přenášíte?


EDIT: Tak jsem to vyzkoušel na ne úplně malém souboru (asi 1200 x 13) a je to naprosto excelentní. Přenos je v mžiku hotovej. A už jsem objevil i popis u Dana Sedláčka - no stále jsem tento materiál nepostihnul celý.

Editoval ludviktrnka (14. 2. 2017 13:34:54)

Offline

#17 15. 2. 2017 11:36:44

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

Re: kopírování mezi soubory - makro

Transferable vždy značí práci schránky. To znamené že přenáší vše stejně jako když uděláte Ctrl+C.
     Konkrétně to znamená také přenos obrazu - nejen textu. Ostatní metody jsou většinou omezené například jen na text. Účelem je zřejmě dlouhodobé uchování v paměti. Schránka určitě zabírá mnohem víc místa a tak umí jen jeden obsah. To samozřejmě přenese relativně spolehlivě.
     Proto Transferable (schránka) se při novém nakopírování dat smaže a ponechá jen poslední. U ostatních způsobů kopírování - například přes deklarace Dim, Global ... lze načíst docela mnoho různých datových paketů které se mohou volat na přeskáčku. Je to ale docela složité protože to někdy umí zaplnit postupně celou operační paměť. Složité je to proto že se používá ještě odkládací paměť a v operační se uchovávají jen adresy obsahu. Kvůli špatně vybavené paměti často program padá. Paměť se plní a neuvolňuje. To souvisí také asi víc s Operačním systémem, počtem spuštěných úloh a asi mnoho jiných věcí.
     Když se použije schránka tak se kopírovaný obsah nemusí vejít do operační paměti. Potom se odloží a vkládá se jen po částech - to co přenese cachovací paměť úložiště (stránkovací paměť).


     Já tomu až tak dobře nerozumím ale programátor by měl optimalizovat procesy tak aby vše chodilo co nejrychleji a bez nebezpečí pádu. Proto si myslím, že UNO používá asi výhradně kopírování schránkou za cenu větší bezpečnosti. Proto já (a a nejsem sám) UNO vůbec nevolá pokud to není nutné.


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

#18 15. 2. 2017 11:59:15

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 408

Re: kopírování mezi soubory - makro

Já myslím že tady je zásadní ta věc, že ačkoli vybírám celý list ( src_data = ThisComponent.Sheets(0),
ThisComponent.Currentcontroller.select(src_data) ) tak schránka ty prázdné buňky více méně ignoruje a to co je ke kopírování tak spolehlivě a rychle natáhne a vyplivne. Já bych to viděl jako optimální způsob nahrazení "starých dat" novými ve stávajícím listu. Rozhodně z toho co jsem zkoušel tak nejrychlejší. Asi se to ale moc nehodí do cyklů, kdy se pak musí neustále přepínat aktivní listy. (což by možná mohlo zpomalovat, ale vlastně nevím)(Zkoušel jsem i UNO, to bylo celkem fajn, ale ten zápis je pro mě takový kostrbatý), nejpomalejší bylo kopírování obsahu velké matice pomocí zdroj=list.getCellRangeByName("A1:HZ5000").getDataArray,
list2.getCellRangeByName("A1:HZ5000").setDataArray(zdroj)
Tato metoda neumí ignorovat prázdné buňky, čím větší oblast vyberu, tím je přenos pomalejší a nestabilní bez ohledu na množství dat. Na druhou stranu pokud je velikost oblasti přiměřeně malá, a asi se celkem hodí do cyklů - nemusí se přepínat CurrentController.


EDIT: Tak jsem zkusil getTransferable v jiné variantě: kopírování po řádcích do nového sešitu. Je zde nevýhoda kopírování všeho tedy hlavně vzorců, metoda getDataArray bere jen hodnoty, takže to je výrazný rozdíl, který jsem si neuvědomil. Jinak bych musel přes UNO. Nicméně alespoň jsem viděl rychlost a ta je v cyklu kopírování po řádcích v podstatě totožná. (zejména když to musí všude hezky napsat #REF! :-)

Editoval ludviktrnka (15. 2. 2017 12:25:59)

Offline

Zápatí