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

#1 3. 3. 2017 11:33:02

Trambus
Člen
Registrace: 20. 2. 2013
Příspěvků: 20

Makro - ulož, 3x vytiskni a zavři dokument - VYŘEŠENO

Zdravím,

nějak se mi nedaří spojit tři makra dohromady. Jednotlivě vše funfuje, každou operaci mám v dokumentu pod jedním tlačítkem. Chtěl bych, ale mít ještě jedno tlačítko, které by udělalo vše najednou, tedy dokument uložilo, 3x vytisklo a dokumnet zavřelo.

Přikládám kod, který jsem si byl schopný záznamníkem vytvořit, dál prosím o pomoc.

sub uloz_tisk_zavri

dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Copies"
args1(0).Value = 3
args1(1).Name = "Collate"
args1(1).Value = true
dispatcher.executeDispatch(document, ".uno:Print", "", 0, args1())

rem ----------------------------------------------------------------------
rem zavre dokument
   thisComponent.CurrentController.Frame.close( true )
end sub

Editoval Trambus (10. 3. 2017 08:44:57)

Offline

#2 3. 3. 2017 12:08:43

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

Re: Makro - ulož, 3x vytiskni a zavři dokument - VYŘEŠENO

Tak jak to vidím by to mělo chodit správně, ale myslím že není dobře číslo argumentu args1. Konkrétně je to asi upraveno bez přečíslování. Pokud to ale chodí tak jak chcete a jenom netiskne 3x tak opakujte takto :

sub uloz_tisk_zavri
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())
rem ----------------------------------------------------------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Copies"
args1(0).Value = 3
args1(1).Name = "Collate"
args1(1).Value = true
dispatcher.executeDispatch(document, ".uno:Print", "", 0, args1())
Wait 1000 'Pro jistotu čas mezi příkazy
dispatcher.executeDispatch(document, ".uno:Print", "", 0, args1())
Wait 1000 'Pro jistotu čas mezi příkazy
dispatcher.executeDispatch(document, ".uno:Print", "", 0, args1())
rem ----------------------------------------------------------------------
rem zavre dokument
   thisComponent.CurrentController.Frame.close( true )
end sub 

Ale otestujte také původní tvar takto :

sub uloz_tisk_zavri
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())
'Tohle by měl být argument číslo 1 přestože dost příkazů nemá parametry 
'(proto nemají ani čísla) ale počítají se.
rem ----------------------------------------------------------------------
dim args2(1) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Copies"
args2(0).Value = 3 'tohle by mělo fungovat
args2(1).Name = "Collate"
args2(1).Value = true
dispatcher.executeDispatch(document, ".uno:Print", "", 0, args2())
rem ----------------------------------------------------------------------
rem zavre dokument
   thisComponent.CurrentController.Frame.close( true )
end sub 

Editoval neutr (3. 3. 2017 12:11:08)


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É

Online

#3 3. 3. 2017 12:48:04

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

Re: Makro - ulož, 3x vytiskni a zavři dokument - VYŘEŠENO

Ještě mne napadlo že děláte sice správně úpravy za účelem zkrácení kódu, ale stačí funkční makra zřetězit například takto :-


Mějme 4 nahraná makra která mají hodně argumentů. Každé makro má svůj první argument takže pro sloučení se musí přepsat věechny argumenty u dalších maker. Proto první argument 2. makra bude mít číslo nejméně o 1 vyšší nežli poslední argument prvního makra.


(Poznámka : - někdy lze přečíslovat snadno tak že před číslo druhého makra předřadíme desítku podle potřeby. První makro končí argumentem třeba 8 a proto první argument 2. makra začne jako číslo 11. Druhé makro má třeba 5 argumentů takže po přepisu bude začínat číslem 21. Ale i to je dost pracné.)


Nejsnadnější způsob je tento :

Sub PrvniNahrane
'--kód
'--kód
'--kód
'-----počet argumentů nás nezajímá.
DruheNahrane '- to je volání druhého makra
End sub

Sub DruheNahrane
'--kód
'--kód
'--kód
'-----počet argumentů nás nezajímá.
TretiNahrane  '- to je volání třetího makra
End sub

Sub TretiNahrane
'--kód
'--kód
'--kód
'-----počet argumentů nás nezajímá.
CtvrteNahraneJednouTisk 'První kopie
CtvrteNahraneJednouTisk 'Druha kopie
CtvrteNahraneJednouTisk 'Třetí kopie
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array()) 'uloží
thisComponent.CurrentController.Frame.close( true )               'zavre dokument
End sub

Sub CtvrteNahraneJednouTisk
'--kód
'--kód
'--kód
End sub

PS : v podstatě jen před konec nadřazeného makra zapíšete název volaného (následného) makra. Opakování řešíme opakovaným voláním stejného makra.

Editoval neutr (3. 3. 2017 12:52:34)


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É

Online

#4 3. 3. 2017 13:14:29

Trambus
Člen
Registrace: 20. 2. 2013
Příspěvků: 20

Re: Makro - ulož, 3x vytiskni a zavři dokument - VYŘEŠENO

Výborně!

krásně funguje, děkuju mockrát! Kód vypadá nakonec takto, protože to tisklo 6 stránek ne 3 (jednostránkový dokument)

sub uloz_tisk_zavri
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())
rem ----------------------------------------------------------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Copies"
args1(0).Value = 3
args1(1).Name = "Collate"
args1(1).Value = true
dispatcher.executeDispatch(document, ".uno:Print", "", 0, args1())
Wait 1000 'Pro jistotu čas mezi příkazy
rem ----------------------------------------------------------------------
rem zavre dokument
   thisComponent.CurrentController.Frame.close( true )
end sub

Díky moc ještě jednou.

Offline

Zápatí