Odgovori 
Štampanje opsega preko makroa

Poštovanje,
Prešao sam na Oo 3.3 i pojavio se problem: snimljeni makroi kojim se deo tabele u Calcu štampa ne funkcioniše. To jest, štampa mi se ceo fajl.
Kako da kodom definišem opciju Izabrane ćelije koja postoji Datoteka/štampaj/opšte da bi se željen opseg odštampao? Ili se to drugačije radi. U svakom slučaju, ne funkcioniše ni ranija opcija kod štampanja a to je da se mišem selektuje opseg, klikne ikona za štampanje. Kod 3.2.1 se javljao tada prozor koji vas pita da li se želi štampati ceo dokument ili samo izabrani opseg, a sada toga nema, odmah se štampa sve. Milsim da je to jedan od propusta.
Citiraj ovu poruku u odgovoru

U prozorčetu za pripremu štampe i dalje postoji opcija:

   

Nisam koristio takav makro, ali pokušajte da isto izvedete definisanjem opsega za štampu.
Poseti veb stranicu korisnika
Citiraj ovu poruku u odgovoru

Evo mog starog makroa koji je radio besprekorno u oo 3.2
Kod:
sub Stampaj_Nivelaciju_pregled
rem ----------------------------------------------------------------------
rem define variables
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 ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$Q$1:$Z$50"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

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

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$Q$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())


end sub

Stvarno ne znam kako da ga podesim da radi. Snimanje makroa nije uspelo.
Citiraj ovu poruku u odgovoru

Taj makro ne radi ništa drugo do aktiviranja štampanja (naredba .uno:PrintDefault).

Pokušajte da ručno ili iz makroa postavite opseg (Format > Opsezi za štampanje > Odredi) i onda aktivirate štampu.
Poseti veb stranicu korisnika
Citiraj ovu poruku u odgovoru

(02. 02. 2011 02:16)Goran Rakić piše:  Taj makro ne radi ništa drugo do aktiviranja štampanja (naredba .uno:PrintDefault).
Da, ali ranije se u kodu definisao selektovani opseg, pa je u 3.2, koji je bio senzitivan na selektovanje pri štampanju, automatski to prepoznavao kao želju korisnika da štampa opseg a ne ceo dokument, što u 3.3 ne može jer su očigledno celu stvar postavili drugačije. Ali u redu. Idemo dalje. Pokušaću da iščeprkam neko rešenje.
Citiraj ovu poruku u odgovoru

Evo koda, možda nekom posluži:
Kod:
Sub Stampaj
'------------------------------------------------------------------
Dim selArea(0) as new com.sun.star.table.CellRangeAddress
Dim oSheet as object

selArea(0).StartColumn = 16
selArea(0).StartRow = 0
selArea(0).EndColumn = 25
selArea(0).EndRow = 50
oSheet=ThisComponent.Sheets.getByName("List1")
oSheet.setPrintareas(selArea())
ThisComponent.Print(Array())
End Sub
Problem koji me muči jeste kako je moguće da se uz pomoć koda štampa a da je definisanje opsega ćelije po imenu (CellRangeByName), npr.: A1:B5
Citiraj ovu poruku u odgovoru

Za više informacija:
http://www.oooforum.org/forum/viewtopic....sc&start=0
Citiraj ovu poruku u odgovoru

Evo i koda kada se želi definisati opeseg ćelijski byName
Kod:
Sub stampanje2
Dim PrintArea(0) as New com.sun.star.table.CellRangeAddress 'Define an array to contain cell ranges addresses to print

Sheets = ThisComponent.Sheets 'get the collection of sheets
SheetCount = Sheets.Count  'get the count of sheets
For i = 0 to SheetCount - 1  'This loop removes any existing print areas
  oSheet = Sheets.getByIndex(i)
  oSheet.setPrintAreas(Array())  'The Array() is an empty array. setPrintAreas expects an array of parameters, even an empty array.
Next i

PrintSheet = Sheets.getByName("Sheet1")  'get the sheet that has the range you want to print
Cellrange = PrintSheet.getCellRangeByName("B2:C7")  'get the desired range
PrintArea(0) = Cellrange.RangeAddress  'set the first element of the array to be the RangeAddress of the range to print
PrintSheet.setPrintAreas(PrintArea())
ThisComponent.Print(Array())
End sub

Citiraj ovu poruku u odgovoru

Hvala, siguran sam da će koristiti.
Poseti veb stranicu korisnika
Citiraj ovu poruku u odgovoru
Odgovori 




Kontakt | otvorenidokument.com | Povratak na vrh | Povratak na sadržaj | RSS