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

#1 26. 2. 2017 13:42:41

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

Progress bar - průběh procesu

Dobrý den
prosím o nějaký čitelný odkaz nebo příklady, kde bych mohl nastudovat problematiku okolo používání nástroje progress bar, neboli ukazatel průběhu. Našel jsem sice nějakou strukturu, co by to mělo obsahovat, ale neumím to použít v makru.
Podrobněji:
Po stisknutí tlačítka v dialogu se spouští série maker, která načítají, prověřují a zpracovávají vstupní data - je tam několik cyklů (i vnořených) přes středně velké objemy dat, celé to trvá nepříjemně dlouho (na tom taky zapracuji) a líbilo by se mi nějak dát najevo, že mašina nespí, ale pracuje. Jak třeba nastavit začátek a konec průběhu, deklarovat atd. Barvy a vzhled jsou jen kabátek, ale hlavně potřebuji funkčnost.

Tady na odkaz "progress bar" ani "průběh" nic není.

Děkuji

Offline

#2 26. 2. 2017 15:04:28

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

Re: Progress bar - průběh procesu

Tady je kousek kódu který jsem kdysi používal. Bohu žel takto Vám to moc nepomůže protože musíte adresovat konkrétní prvek (ProgressBar).

Sub SplitColumn (ByVal SheetName As String, ByVal ColumnName As String, ByVal ColumnsNo As Long, ByVal RowsNo As Long )
iSheetIndex = ThisComponent.CurrentSelection.CellAddress.Sheet
oSheet = ThisComponent.Sheets.getByIndex( iSheetIndex )
oBar = THISCOMPONENT.CurrentController.StatusIndicator
iNum = 2
oBar. start ( "Split column " & ColumnName & " in sheet " & SheetName, RowsNo/ColumnsNo )
For nR = 0 to RowsNo/ColumnsNo' Volba
oBar.setValue ( nR )
For nC = 0 To ColumnsNo - 1
oSheet.getCellByPosition (nC,nR).setFormula("=" & SheetName & "." & ColumnName & iNum )
iNum = iNum + 1
Next nC
Next nR
oBar.End
End Sub

     Princip je v tom, že se zadávají startovní a koncové hodnoty a pak nárůsty pro posuv. Méně šikovné je stavět na čase který se individuálně liší u stejného procesu. Na konci pak hlásí třeba 100% a stále jede.
     Vám bych doporučil 2 proužky. První na počet souborů a druhý na jednoslivý soubor. Ten už můžete odhadnout průměrným časem. Zde se totiž ten časový posun nedá vysledovat. Navíc můžete udělat poslední soubor jenom jako samoúčelný :
Sub Posledni Soubor
Wait 1000
End sub
     Ten totiž zaručeně skončí po té sekundě (jednotky Wait 1/1000 sec). Takže Disproporce se eliminuje a konec se zobrazí korektně. Také doporučuji jednotlivé kroky deklarovat jako global. Máte - li například 10 souborů zadáte rozsah na 11 (poslední soubor je fiktivní Wait). Při načtení dalšího souboru se hodnota změní a ukazovátko poskočí.
     U složitějších operací - uvedený kód lze používat velikost podílu i nezávisle. Lze například přidávat do hlášky "provádí se 6. operace xyz% z celku 9 pro 4. soubor z celku 11". Hláška může být na formu, nebo v dolním pruhu okna, PopUp okně, buňce ap.

Editoval neutr (26. 2. 2017 15:11:12)


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 26. 2. 2017 15:33:55

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

Re: Progress bar - průběh procesu

Díky, prostuduju to. Protože program si umí spočítat počet řádků dat, můžu sestavit vzorec, který mi zhruba řekne, kde se stráví kolik času - počty průchodů v cyklech, při troše práce upřesnit podle hierarchie cyklů. Když z tohoto udělám 100%, můžu snad spočítat velikost kroku.
Další problémek - zpracovávám data z více listů - má to nějaký vliv na deklarace?

Offline

#4 26. 2. 2017 17:30:29

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

Re: Progress bar - průběh procesu

Ne více listů stejného sešitu nevadí. Nevadí ani více různých dokumentů, ale je potřeba deklarovat global, nebo volat také z a do knihovny MojeMakraStandard. Platnost je dána ke knihovnám a modulům Basic a ne k listům sešitu.
     Public a global jsou tak nějak nadřazené nad lokální knihovny v sešitech, ale když dáte proměnnou v sešitě jako global tak ji vidí i jiné sešity i jiné typy dokumentů (Writer, Draw, ...). Nejdříve ale musíte tyto proměnné aktivivat - do té doby vidět nejsou. To se dělá většinou funkcí nebo makrem které je jen "vysvítí". Přiřadíte jim nějakou hodnotu. Pro číselné stačí nula a pro string "". Pak už je vidí i jiné dokumenty. Pokud to uděláte správně tak nemusíte dělat samostatnou aktivaci ale neměl byste na to zapomenout a když by to nechodilo tak aktivovat.
     Ještě tam jde o platnost - na to si dejte pozor. Global by měla platit do konce sezení i při zavření sešitu který ji aktivoval, ale s tím jsem měl kdysi dost potíží takže raději nechte takový dokument aktivní.

Editoval neutr (26. 2. 2017 17:38:08)


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

#5 26. 2. 2017 18:05:25

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

Re: Progress bar - průběh procesu

Tak díky, pokusím se to nějak strávit a přivést k životu.

Offline

#6 26. 2. 2017 18:08:57

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

Re: Progress bar - průběh procesu

Třeba to vůbec nebude potřeba, eliminoval jsem část cyklů, podařilo se mi nějaké operace sloučit do jednoho a hned je to lepší řešení než "housenka".

Offline

#7 26. 2. 2017 18:16:20

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

Re: Progress bar - průběh procesu

Ještě mne napadlo vyhledat vzory - těch mám také hodně a našel jsem zajímavý ProgressBar+Dialog

Editoval neutr (26. 2. 2017 18:16:45)


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. 2. 2017 20:19:11

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

Re: Progress bar - průběh procesu

Asi jsem to dal - díky za příklady, pomohlo i tohle (našel jsem odkaz v Andrew P.):
http://www.openoffice.org/api/docs/comm … l#setRange

Offline

Zápatí