Drukowanie bieżącej strony w Calc

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
kristoferes
Posty: 11
Rejestracja: pn lis 30, 2009 10:21 am

Drukowanie bieżącej strony w Calc

Post autor: kristoferes »

Wyskakuje kilkanaście razy opienko: Błąd składni języka BASIC. Oczekiwano symbolu
Wygenerowany kod w rejestratorze makr:

Kod: Zaznacz cały

REM  *****  BASIC  *****
Sub print
End Sub
sub druk
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(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Copies"
args1(0).Value = 1
args1(1).Name = "Collate"
args1(1).Value = true
dispatcher.executeDispatch(document, ".uno:Print", "", 0, args1())
end sub
System operacyjny Windows XP pro sp3, Open Office 3.1.1

Nagrywanie zaczynam od momentu kliknięcia na przycisk menu plik. Jeżeli nagrywanie rozpoczęte jest od momentu zaznaczania komórek to to samo się dzieje. Mi zależy na tym, żeby użytkownik mógł zaznaczyć obszar który chce wydrukować, a właściwie to bieżącą stronę na której się znajduje, lub stronę o numerze dnia miesiąca. Właściwie to to ostatnie było by najlepszym rozwiązaniem. Makro pobierało by sobie wartość np. z funkcji DNI.MIESIĄCA jednak nie mam pojęcia jak napisać takie makro.
OpenOffice 3.1 na Windows Vista, windows XP, Linux
Jan_J
Posty: 4579
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Drukowanie bieżącej strony w Calc

Post autor: Jan_J »

Nieważne jak nagrywasz, ważne co jest napisane.
Napisane zaś jest, że masz dwa makra, pierwsze nazywa się print, a drugie druk.
A że print jest słowem kluczowym, jasne że makro tak się nazywać nie może. I stąd cały problem. (Zresztą to pierwsze makro jest do usunięcia w całości.)
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
kristoferes
Posty: 11
Rejestracja: pn lis 30, 2009 10:21 am

Re: Drukowanie bieżącej strony w Calc

Post autor: kristoferes »

Wielkie dzięki. Rzeczywiście to był problem z nazwą. Po usunięciu działa, jednak drukuje wszystko co na arkuszu jak leci :(.
W necie znalazłem taką stronę o parametrach drukowania http://office-software.suite101.com/art ... a_document
Jak włożyć do funkcji PrintProperty(1).Value odpowiednią wartość? Wystarczy tak poprostu w cudzyslowie zapodać jej adres odpowiedniej komórki, w której funkcja wyliczy bieżący dzień miesiąca?
OpenOffice 3.1 na Windows Vista, windows XP, Linux
Jan_J
Posty: 4579
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Drukowanie bieżącej strony w Calc

Post autor: Jan_J »

Wg mnie jako dalsze pary Name/Value w tabeli args(). Pole Value jest zwykłym tekstem. Wcześniej trzeba zadbać o alokację odpowiedniej liczby elementów -- w deklaracji Dim args(liczba).
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
kristoferes
Posty: 11
Rejestracja: pn lis 30, 2009 10:21 am

Re: Drukowanie bieżącej strony w Calc

Post autor: kristoferes »

Czy mogę prosić o wypisanie kodu? Jestem nowicjuszem w pisaniu w tym języku, i dalej nie wiem jak to zrobić :(.
edycja 3.12.2009 13:00
Napisałem coś takiego:

Kod: Zaznacz cały

REM  *****  BASIC  *****

Sub printMe
Document=ThisComponent ' wyróżnienie aktywnego dokumetu
Sheet=Document.Sheets.getByName("Arkusz1")  ' wyróżnienie arkusza
Cell=Sheet.getCellByPosition(7,2) 'wyróżnienie komórki H3 w której jest funkcja   DZIEŃ(DZIŚ())
								' 'Cell=Sheet.getCellRangeByName("H3")   'alternatywnie do wcześniejszego wiersza
Z=Cell.getValue ' przypisanie wartości liczbowej do zmiennej Z

Dim PrintProperty(1) as New com.sun.star.beans.PropertyValue
PrintProperty(0).Name = "CopyCount"  'Chyba chodzi o kopie druku
PrintProperty(0).Value = 1
PrintProperty(1).Name = "Pages"
rem PrintProperty(1).Value = "2"  ' to działa, ale nie chodzi mi o to
  PrintProperty(1).Value = Z   	' i tu właśnie nie wiem jak przekazać wartość zmiennej Z do tej funkcji
						' żeby mi wydrukowało stronę, którą chcę
thisComponent.Print (PrintProperty) ' strzałka wskazuje na tą linię

End Sub 
Program niestety wysypuje się chyba na ostatniej linii. Wyskakuje okno o treści:
Błąd uruchomienia języka BASIC, wystąpił wyjątek
Type: com.sun.star.lang.IllegalArgumentException
Message:

Proszę o wyrozumiałość, ale to są moje początki z makrami, i nie wiem co jest nie tak.
OpenOffice 3.1 na Windows Vista, windows XP, Linux
Jan_J
Posty: 4579
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Drukowanie bieżącej strony w Calc

Post autor: Jan_J »

Jak napisałem wcześniej, wartość pola Value (podobnie zresztą jak Name) musi być zwykłym tekstem (czyli daną typu String). U Ciebie jest pobrana przez getValue, więc ma typ Int lub Float. Stąd problem. Możliwości są dwie:
albo

Kod: Zaznacz cały

Z = Cell.getString()
albo

Kod: Zaznacz cały

Z = Cell.getValue()
PrintProperty(1).Value = str(Z)
\seealso nieoceniona bratnia pomoc, czyli http://www.oooforum.org/forum/viewtopic.phtml?t=55986
Program niestety wysypuje się chyba na ostatniej linii
W środowisku uruchomieniowym Basica w OpenOffice jest całkiem niezły debugger, pozwalający badać program w trybie krokowym. Opcje: uruchom, zatrzymaj, przekrocz itp. są na listwie narzędziowej. Szczególne warto pracować pojedynczymi krokami (przekrocz) i zakładać pułapki (zwane tam punktami przerwania). Wgląd w wartości wyrażeń dostajesz w okienku zwanym Czujka. Tak że dość łatwo własnymi siłami wzmocnić przekonanie z poziomu ,,chyba'' do ,,na pewno'', a także odkryć przyczynę błędu.
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
kristoferes
Posty: 11
Rejestracja: pn lis 30, 2009 10:21 am

Re: Drukowanie bieżącej strony w Calc

Post autor: kristoferes »

Wielkie dzięki Janie. To dopiero moje początki w tworzeniu makr w OO, a książek do pisania makr w OO po polsku jak na lekarstwo.
Problem rozwiązany
SOLVED
OpenOffice 3.1 na Windows Vista, windows XP, Linux
ODPOWIEDZ