Strona 1 z 1

Drukowanie bieżącej strony w Calc

: pn lis 30, 2009 8:20 pm
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.

Re: Drukowanie bieżącej strony w Calc

: pn lis 30, 2009 8:52 pm
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.)

Re: Drukowanie bieżącej strony w Calc

: pn lis 30, 2009 9:26 pm
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?

Re: Drukowanie bieżącej strony w Calc

: wt gru 01, 2009 12:25 pm
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).

Re: Drukowanie bieżącej strony w Calc

: śr gru 02, 2009 11:15 am
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.

Re: Drukowanie bieżącej strony w Calc

: pt gru 04, 2009 11:47 am
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.

Re: Drukowanie bieżącej strony w Calc

: czw gru 10, 2009 2:32 pm
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