[Solved]Makro konwersja do PDF zakresu komórek z Ark2

Użytkowanie arkusza kalkulacyjnego
KoalaG
Posty: 30
Rejestracja: ndz sty 28, 2018 10:42 am

[Solved]Makro konwersja do PDF zakresu komórek z Ark2

Post autor: KoalaG »

Witam.

Potrzebuje jakiegoś kursu po polsku od podstaw.
Znalazłem w necie pdf z uczelni ale są problemu ze składnią w nim zawartym.

Mam tutaj problem nie działa z=oSheet.getCellByPosition(3,a).getValue jeżeli zmienię na z=oSheet.getCellByPosition(a,3).getValue to pobiera bez problemu wartości z kolejnych komórek

a=0
If a <> 3 Then
Do

z=oSheet.getCellByPosition(3,a).getValue
Print "komorka to " &z &" wiersz" &a
a=a+1

Loop Until a = 3

End If

??? Działa nie zauważyłem tego bo w kolumnie miałem też znaki, więc zamiast getValue .... getString
Ostatnio zmieniony pn lut 26, 2018 8:47 am przez KoalaG, łącznie zmieniany 2 razy.
OpenOffice 4.1.13 na Windows 7
KoalaG
Posty: 30
Rejestracja: ndz sty 28, 2018 10:42 am

Re: Kurs tworzenia makr.

Post autor: KoalaG »

Teraz pytanko jest jakaś funkcja wydruku do PDF całego arkusza2 ?
Z nadaniem odpowiedniej nazwy?
OpenOffice 4.1.13 na Windows 7
Awatar użytkownika
Jermor
Posty: 2254
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Kurs tworzenia makr.

Post autor: Jermor »

Zadajesz kolejne pytanie na forum i nie kwitujesz swoich wpisów. Gdy chcesz aby ludzie mieli satysfakcję z tego, że ci pomogli, to gdy pomoc pomogła rozwiązać twój problem, dopisz frazę [Solved] w tytule postu (edytując pierwszy własny post) albo chociaż dodaj post zamykający z treścią: dzięki - pomogło.
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Kurs tworzenia makr.

Post autor: Jan_J »

Dość bogate (choć też dość chaotyczne) zbiory przykładów dot. makr OpenOffice przedstawił Andrew Pitonyak: Andrew Macro (http://www.pitonyak.org/oo.php) oraz OpenOffice Macros Explained(OOME, http://www.pitonyak.org/OOME_3_0.pdf). Mimo to dają dobry wgląd w to, co i jak da się zrobić. Nie są natomiast ani kursami myślenia algorytmicznego, ani kursami tworenia makr. Nie jest to ich wadą, po prostu mają inny cel.

Mimo upływu lat są to wciąż najobszerniejsze zbiory przykładów dla OO API.

Jak to w projektach zarządzanych przez społeczność, z systematycznym kursem jest problem. Poza tym jest problem z metodologią środków: Basic jest językiem przestarzałym, wielu uważa że nie warto się nim zajmować. Co prawda API jest niezależne od języka i ma wsparcie w wielu językach, ale z wielu powodów (tradycja, rozwiązania konkurencyjne, wsparcie narzędziami wbudowanymi w pakiet) często pytanie o makro jest pytaniem o makro w Basicu.

Zresztą samo pojęcie "makra" jest niejasne i nadużywane.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
KoalaG
Posty: 30
Rejestracja: ndz sty 28, 2018 10:42 am

Re: Kurs tworzenia makr.

Post autor: KoalaG »

W sumie rozwiązałem prawie wszystkie swoje problemy z makro.

Teraz potrzebuję tylko wydrukować do PDF zawartość Arkusza2.

Znalazłem na razie to trzeba będzie rozebrać i ustawić.

Kod: Zaznacz cały

sub
oDocument=ThisComponent      
oSheet2=oDocument.Sheets.getByName("Arkusz2")
 oCellRange = oSheet2.getCellRangeByName("A10:B10")

 dim aFilterData(0) as new com.sun.star.beans.PropertyValue
 aFilterData(0).Name = "Selection"
 aFilterData(0).Value = oCellRange

 dim aMediaDescriptor(1) as new com.sun.star.beans.PropertyValue
 aMediaDescriptor(0).Name = "FilterName"
 aMediaDescriptor(0).Value = "calc_pdf_Export"
 aMediaDescriptor(1).Name = "FilterData"
 aMediaDescriptor(1).Value = aFilterData()
 oDoc.storeToURL("file:///test.pdf", aMediaDescriptor())

end sub
Ostatnio zmieniony ndz lut 25, 2018 1:34 am przez KoalaG, łącznie zmieniany 2 razy.
OpenOffice 4.1.13 na Windows 7
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Kurs tworzenia makr.

Post autor: Jan_J »

Moim zdaniem tak się po prostu nie robi z kilku prowodów.

Nawet, jeżeli licencja (np. CreativeCommons albo GNU Free Documentation License) pozwala na dowolne kopiowanie, modyfikowanie i rozpowszechnianie przykładów, warto mieć na uwadze, że

1. cytowany tym sposobem kod nie jest autorstwa autora postu ani żadnego z autorów dyskusji.
2. nieomówiony przykład niczego nie wnosi do dyskusji.
3. brak podania źródła (w tym przypadku Axel Richter na stackoverflow, https://stackoverflow.com/questions/305 ... ect=1&lq=1) jest brakiem szacunku dla autora przykładu;
4. jest też mylący dla innych osób poszukujących rozwiązań podobnego problemu. W wyniku takich postów liczne serwisy cytują prawie te same "magiczne" kody, bez dbałości o wyjaśnienie, jakość, elastyczność.
5. W efekcie gdzie się nie obrócisz, znajdziesz dokładnie to samo objaśnienie, tylko gorsze niżoryginał. Po co tworzyć chaos?
6. Czy cytując jesteś pewien, że nie naruszasz praw autora oryginału (być może nie naruszasz, ale czy to sprawdziłeś?).
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
KoalaG
Posty: 30
Rejestracja: ndz sty 28, 2018 10:42 am

Re: Makro konwersja do PDF zakresu komórek z Ark2

Post autor: KoalaG »

Tu jest rozwiązanie.
Jeszcze popracuje nad wpisaniem nazwy, daty do nazwy pliku.
Oraz zaznaczeniem zakresu druku. Jak jest ze składnią
oCellRange = oSheet.getCellRangeByName("A1:B10")

Czy to poprawnie zapisałem? czy mogę użyć zmiennych kolumna wiersz .

oSheet.getCellRangeByName("A1:B&wiersz") ??


https://forum.openoffice.org/en/forum/v ... 20&t=87775
OpenOffice 4.1.13 na Windows 7
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Makro konwersja do PDF zakresu komórek z Ark2

Post autor: Jan_J »

Zmienne i obiekty.
Obiekt jest pewnego rodzaju zapisem w pamięci. Zmienna jest nazwą, za której pomocą możemy "dotrzeć" do obiektu.

W przeciwieństwie do prostych typów danych, których wartości są niepodzielne (w potocznym ujęciu) i niezmienne, obiety są przykładem tzw danych strukturalnych.

Obiekty: pola i metody.
Obiekty mają na ogół możliwość reprezentowania pewnych danych składowych, budujących większą całość. Zmiana tej wartości nie sprawia, że zapis samego obiektu traci swoją tożsamość. Takie części składowe mają swoje nazwy i określa się je jako pola.
Na przykład w projekcie obiektu reprezentującego obywatela sensowne byłoby pole name pamiętające tekst imienia, pole lastname dla tekstowej reprezentacji nazwiska, pole birthdate dal reprezentacji (złożonej?) dany urodzenia itp.
Nazwy te wchodzą w skład projektu typu obiektu, natomiast w aplikacji dałoby się powoływać obiekty typu person i pamiętać je pod nazwami takimi jak chcemy.

Metody to funkcje -- reprezentacje działań wbudowane w projekt obiektu. Dla obywatela mobłaby być na przykład metoda age -- obliczająca wiek na podstawie daty urodzenia.

W przykładzie
KoalaG pisze:oCellRange = oSheet.getCellRangeByName("A1:B10")
oSheet jest zmienną (o wcześniej nadanej wartości) typu ScTableSheetObj. Jest ona wyposażona w wiele pól i wiele metod. Jedną z jej metod jest getCellRangeByName. Działanie to tworzy obiekt reprezentujący pojedynczą komórkę arkusza albo blok takich komórek. W przykładzie powyższym wynikowy obiekt (typu ScCellRangeObj) zostaje zapamiętany pod zmienną o nazwie oCellRange.
Metoda ta wymaga przekazania pojedynczej wartości tekstowej, rozumianej jako adres bloku, jaki ma być reprezentowany przez obiekt. W tym przypadku jest to tekst "A1:B10".

Każda metoda i każda funkcja mają ustaloną -- jedną albo więcej -- liczbę i format wymaganych argumentów; mogą mieć też argumenty dodatkowe, nie wymagane.

KoalaG pisze:oSheet.getCellRangeByName("A1:B&wiersz") ??
Typy danych, operatory, działania; argumenty i wyniki działań.

W odniesieniu do liczb całkowitych, literał 12 składający się ze znaków 1, 2 bezpośrednio reprezentuje liczbę dwanaście. Ciąg znaków 12+1 nie jest literałem, zawiera dwa literały: 12 oraz 1 i wstawiony między nie symbol działania +. Jest to wyrażenie. Działanie + jest określone w Basicu jako dodawanie wartości liczbowych, także określonych przez wyrażenia.

Ciąg znaków "12+1" jest literałem kodującym tekst złożony z symboli 1, 2, + oraz 1. O żadnym dodawaniu nie
ma tu mowy.

Podobnym operatorem w odniesieniu do tekstów jest symbol &
Działanie tego operatora polega na łączeniu argumentów. Jeśli a i b będą poprawnymi wyrażeniami dającymi wartości typu tekstowego (String), to a & b jest poprawnym wyrażeniem dającym połączenie tych tekstów w jeden łańcuch. Nieważne, czy a albo b są literałami, opisami działań, czy angażują użycie funkcji. Ważne że da się je wyliczyć na podstawie tego jak są opisane.

Tekst "A1:B&wiersz" (bardziej precyzyjnie jest to literał -- czyli napis bezpośrednio reprezentujący wartość) opisuje stałą tekstową zbudowaną z następujących symboli:
A, 1, :, B, &, w, i, e, r, s, oraz z.
Taka stała nie opisuje żadnego adresu w arkuszu, sądzę że generuje błąd użycia funkcji.

Zamiar Twój jest zapewne inny: mając daną wiedzę, że prostokątny region arkusza zaczyna się w komórce A1, składa się z 2 kolumn i n wierszy, chcesz zbudować wartość tekstową opisującą jego adres.
Taka wartośćnie może być literałem -- bo nie jest "stała", w tym sensie że pisząc kod nie wiesz jaka ma być, to się okaże dopiero w trakcie realizacji poleceń.
Definiujesz więc zmienną liczbową n. Na przykład
n = 12
albo z odczytania, wyliczenia czegoś, albo przez interakcję z użytkownikiem, albo ...

"A1:Bn" jest literałem. Podobnie "A1:B & n". Tobie chodzi o połączenie dwóch tesktów: stałego "A1:B" i zmiennego, wziętego ze stanu zmiennej n.
"A1:B" & n
pomijając fakt, że n zawiera liczbę, więc wcześniej wypadałoby utworzyć jej reprezentację tekstową. Ale to się stanie automatycznie, bo Basic zmuszony do obliczenia postaci tekst & liczba, sam zamieni liczbę na tekst.

Tyle tytułem przydługiego opisu.

Miałem kiedyś studenta, który powiedział, że nie potrafi wyjaśnić poszczególnych fragmentów napisanego ponoć samodzielnie programu, bo uczy się całościowo, dzięki czemu nie musi zwracać uwagi na szczegóły. To tak nie działa. Dlatego napisałem wcześniej, że pojęcie makra jest niejasne. Tu nie chodzi o makro, chodzi o programowanie. Jest zamiar, trzeba go wtłoczyć w ramy pewnego języka, wyposażonego w składnię (przesądzającą o legalności konstrukcji językowych) i semantykę (nadającą sens tym wypowiedziom). Q&D kursy i tutoriale podsuwają liczne przykłady, ale nie wyręczą w mozole dojścia do zrozumienia co jest czym. Wyżej jest jeszcze algorytmika (czyli sztuka jak to robić żeby było sprawnie).
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
ODPOWIEDZ