Różnica pomiędzy stronami "Terminarz" i "LibreOffice Calc – makra – przykłady"

Z Henryk Dąbrowski
(Różnica między stronami)
Przejdź do nawigacji Przejdź do wyszukiwania
m (1 wersja)
 
 
Linia 1: Linia 1:
<div style="text-align:right; font-size: 130%; font-style: italic; font-weight: bold;">08.06.2021</div>
+
<div style="text-align:right; font-size: 130%; font-style: italic; font-weight: bold;">22.03.2020</div>
  
  
Linia 6: Linia 6:
  
  
Przedstawiamy niżej prosty, ale z&nbsp;pewnością użyteczny kod, który pozwoli użytkownikowi stworzyć terminarz obejmujący powtarzające się zadania oraz wydarzenia wypadające w&nbsp;ustalonych dniach roku. Kod składa się z&nbsp;pięciu podprogramów: funkcji MonthDays() i&nbsp;DzienTygodnia() oraz procedury RangeBorder() – te podprogramy zostały zdefiniowane wcześniej i&nbsp;Czytelnik może się z&nbsp;nimi łatwo zapoznać. Dodatkowo mamy procedurę główną Terminarz(), która określa, jak będzie budowany nasz terminarz i&nbsp;procedurę pomocniczą CellFormat(), która określa, jak zostanie sformatowana komórka, do której wpisujemy dane.
+
Celem tej strony <b>nie jest</b> nauczenie kogokolwiek pisania makr w arkuszu LibreOffice. Tego typu strony Czytelnik łatwo znajdzie w sieci. Jeśli możemy o&nbsp;pewnej formie nauki mówić, to o&nbsp;nauce poprzez proste, dobrze objaśnione przykłady. Jednak taka forma nauki musi z&nbsp;konieczności zakładać pewne minimum wiedzy. Mam jedynie nadzieję, że strona ta pomoże osobom, które mają pewne pojęcie o&nbsp;programowaniu napisać własne, <b>proste</b> makra. To własnie takie makra są najczęściej potrzebne i&nbsp;uwalniają nas od żmudnej pracy z&nbsp;arkuszem.
  
  
Wydarzenia wypadające w&nbsp;określonych dniach roku zostały zebrane w&nbsp;arkuszu o&nbsp;ustalonej nazwie „Dni” i&nbsp;nazwy tej nie należy zmieniać bez wprowadzenia odpowiedniej zmiany w&nbsp;kodzie procedury Terminarz(). Daty w&nbsp;kolumnie A&nbsp;arkusza „Dni", to kolejne dni dowolnego roku przestępnego. W&nbsp;kolumnie B&nbsp;wpisujemy tekst opisujący wydarzenie związane z&nbsp;określonym dniem miesiąca. Dla przykładu w&nbsp;kolumnie B&nbsp;zostały wpisane popularne imieniny i&nbsp;niektóre święta. Dane z&nbsp;arkusza „Dni” zostaną wpisane w&nbsp;tworzonym przez nas terminarzu w&nbsp;kolumnie F.
+
Polecane strony:
  
 +
<b>LibreOffice</b> ([https://documentation.libreoffice.org/en/english-documentation/ LINK])
  
<b>Przed uruchomieniem</b> procedury Terminarz() musimy ustalić i&nbsp;wpisać do jej kodu wartości trzech zmiennych: <b>Start</b>, <b>Koniec</b> oraz <b>k</b>. Zmienna Start (typu Date) określa pierwszy dzień od którego zacznie się budowanie terminarza, zaś zmienna k&nbsp;(typu Long) określa <b>indeks</b> wiersza, od którego rozpocznie się budowanie terminarza i&nbsp;do którego zostanie wpisana wartość zmiennej Start. Zmienna Koniec (typu Date) określa ostatni dzień, który zostanie uwzględniony w&nbsp;tworzonym terminarzu. Należy pamiętać, że terminarz zostanie utworzony w&nbsp;pierwszym arkuszu naszego skoroszytu, zatem skoroszyt poza arkuszem „Dni” musi mieć przynajmniej jeden dodatkowy arkusz.
+
<b>Apache OpenOffice BASIC Programming Guide</b> ([https://wiki.openoffice.org/wiki/Documentation/BASIC_Guide LINK])
  
 +
<b>Andrew Pitonyak</b> ([http://www.pitonyak.org/ LINK])
  
Powtarzające się terminy można podzielić na takie, które wypadają w&nbsp;określonym dniu miesiąca i&nbsp;na takie, które wypadają w&nbsp;określonym dniu tygodnia. Sposoby badania, czy w&nbsp;danym dniu wypadają interesujące nas terminy, zostały pokazane w&nbsp;przykładowym kodzie procedury Terminarz(). Zdefiniowane przez nas terminy zostaną wpisane w&nbsp;utworzonym terminarzu w&nbsp;kolumnie D.
 
  
  
Link do skoroszytu [https://henryk-dabrowski.pl/pliki/terminarz/Terminarz.ods Terminarz.ods]
 
  
<span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Terminarz()
+
*[[Zmienne]]
    <b><span style='color:#1f1c1b;'>Dim</span></b> Licz <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>, wiersz <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>, k <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>, t <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>, MonthEnd <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>
+
*[[Tablice]]
    <b><span style='color:#1f1c1b;'>Dim</span></b> notatka <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>String</span>
+
*[[Arkusze]]
    <b><span style='color:#1f1c1b;'>Dim</span></b> d <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Date</span>, Start <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Date</span>, Koniec <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Date</span>
+
*[[Kolumny i wiersze]]
    <b><span style='color:#1f1c1b;'>Dim</span></b> oShtDni <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oSht <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oColumns <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oRow <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oCllA <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oCllB <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
+
*[[Komórki]]
    oShtDni <span style='color:#000080;'>=</span> ThisComponent.getSheets().getByName(<span style='color:#ff0000;'>&quot;Dni&quot;</span>) <span style='color:#707070;'>'uchwyt do arkusza o nazwie &quot;Dni&quot;</span>
+
*[[Zakresy komórek]]
    oSht <span style='color:#000080;'>=</span> ThisComponent.getSheets.getByIndex(<span style='color:#ff0000;'>0</span>) <span style='color:#707070;'>'uchwyt do pierwszego arkusza</span>
+
*[[Zakresy komórek – metody getData i getDataArray | Zakresy komórek – metody '''getData''' i '''getDataArray''']]
    ThisComponent.CurrentController.setActiveSheet(oSht) <span style='color:#707070;'>'aktywacja pierwszego arkusza</span>
+
*[[Funkcje wbudowane, poradniki LibreOffice i inne linki]]
    Start <span style='color:#000080;'>=</span> <span style='color:#0095ff;'>DateSerial</span>(<span style='color:#ff0000;'>2021</span>, <span style='color:#ff0000;'>1</span>, <span style='color:#ff0000;'>1</span>) <span style='color:#707070;'>'początek terminarza</span>
 
    Koniec <span style='color:#000080;'>=</span> <span style='color:#0095ff;'>DateSerial</span>(<span style='color:#ff0000;'>2021</span>, <span style='color:#ff0000;'>12</span>, <span style='color:#ff0000;'>31</span>) <span style='color:#707070;'>'koniec terminarza</span>
 
    k <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>0</span> <span style='color:#707070;'>'UWAGA: k odpowiada indeksowi wiersza z datą Start</span>
 
    d <span style='color:#000080;'>=</span> Start
 
    <b><span style='color:#1f1c1b;'>Do While </span></b>d &lt;= Koniec
 
        Licz <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>0</span> <span style='color:#707070;'>'zmienna Licz zlicza, ile wykonano wpisów pod tą samą datą w kolumnie D</span>
 
        t <span style='color:#000080;'>=</span> <span style='color:#0095ff;'>Weekday</span>(d) <span style='color:#707070;'>'niedziela-1, sobota-7</span>
 
        MonthEnd <span style='color:#000080;'>=</span> <span style='color:#0095ff;'>MonthDays</span>( <span style='color:#0095ff;'>Year</span>(d), <span style='color:#0095ff;'>Month</span>(d) )
 
        oRow <span style='color:#000080;'>=</span> oSht.getRows().getByIndex(k) <span style='color:#707070;'>'uchwyt do wiersza o indeksie k</span>
 
        oCllA <span style='color:#000080;'>=</span> oSht.getCellByPosition(<span style='color:#ff0000;'>0</span>, k) <span style='color:#707070;'>'uchwyt do komórki A wiersza o indeksie k</span>
 
        oCllB <span style='color:#000080;'>=</span> oSht.getCellByPosition(<span style='color:#ff0000;'>1</span>, k) <span style='color:#707070;'>'uchwyt do komórki B wiersza o indeksie k</span>
 
        oCllA.Value <span style='color:#000080;'>=</span> d
 
        <span style='color:#707070;'>'formatowanie komórki A:</span>
 
        oCllA.NumberFormat <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>36</span> <span style='color:#707070;'>'format daty: 31.12.1999</span>
 
        oCllA.VertJustify <span style='color:#000080;'>=</span> com.sun.star.table.CellVertJustify.CENTER <span style='color:#707070;'>'wyśrodkowanie tekstu w pionie</span>
 
   
 
        oCllB.<span style='color:#000080;'>String</span> <span style='color:#000080;'>=</span> <span style='color:#0095ff;'>DzienTygodnia</span>(d)
 
        <span style='color:#707070;'>'formatowanie komórki B:</span>
 
        oCllB.HoriJustify <span style='color:#000080;'>=</span> com.sun.star.table.CellHoriJustify.CENTER <span style='color:#707070;'>'wyśrodkowanie tekstu w poziomie</span>
 
        oCllB.VertJustify <span style='color:#000080;'>=</span> com.sun.star.table.CellVertJustify.CENTER <span style='color:#707070;'>'wyśrodkowanie tekstu w pionie</span>
 
   
 
        <b><span style='color:#1f1c1b;'>If </span></b>t <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>1</span> <b><span style='color:#1f1c1b;'>Then</span></b> <span style='color:#707070;'>'niedziela</span>
 
            oRow.CellBackColor <span style='color:#000080;'>=</span> <span style='color:#0095ff;'>RGB</span>(<span style='color:#ff0000;'>255</span>, <span style='color:#ff0000;'>0</span>, <span style='color:#ff0000;'>0</span>) <span style='color:#707070;'>'czerwony kolor tła wiersza</span>
 
        <b><span style='color:#1f1c1b;'>End If</span></b>
 
   
 
    <span style='color:#707070;'>'Informacja dotycząca wybranych dni roku z arkusza &quot;Dni&quot; (wpis w kolumnie F)</span>
 
        wiersz <span style='color:#000080;'>=</span> <span style='color:#0095ff;'>DateSerial</span>(<span style='color:#ff0000;'>2000</span>, <span style='color:#0095ff;'>Month</span>(d), <span style='color:#0095ff;'>Day</span>(d)) - <span style='color:#ff0000;'>36526</span> <span style='color:#707070;'>'indeks wiersza w arkuszu &quot;Dni&quot; z notatką odpowiadającą dacie d</span>
 
        notatka <span style='color:#000080;'>=</span> oShtDni.getCellByPosition(<span style='color:#ff0000;'>1</span>, wiersz).<span style='color:#000080;'>String</span>
 
        <b><span style='color:#1f1c1b;'>If </span></b>notatka &lt;&gt; <span style='color:#ff0000;'>&quot;&quot;</span> <b><span style='color:#1f1c1b;'>Then</span></b>
 
            <b><span style='color:#000000;'>Call</span></b> CellFormat( oSht.getCellByPosition(<span style='color:#ff0000;'>5</span>, k), notatka, <span style='color:#0095ff;'>RGB</span>(<span style='color:#ff0000;'>204</span>, <span style='color:#ff0000;'>255</span>, <span style='color:#ff0000;'>204</span>) )
 
        <b><span style='color:#1f1c1b;'>End If</span></b>
 
   
 
    <span style='color:#707070;'>'Powtarzające się terminy - dotyczące dni miesiąca (wpis w kolumnie D)</span>
 
   
 
        <b><span style='color:#1f1c1b;'>If </span></b>Day(d) <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>7</span> <b><span style='color:#1f1c1b;'>Then</span></b>
 
            <b><span style='color:#000000;'>Call</span></b> CellFormat( oSht.getCellByPosition(<span style='color:#ff0000;'>3</span>, k + Licz), <span style='color:#ff0000;'>&quot;Siódmy dzień miesiąca&quot;</span>, <span style='color:#0095ff;'>RGB</span>(<span style='color:#ff0000;'>153</span>, <span style='color:#ff0000;'>204</span>, <span style='color:#ff0000;'>255</span>) )
 
            Licz <span style='color:#000080;'>=</span> Licz + <span style='color:#ff0000;'>1</span>
 
        <b><span style='color:#1f1c1b;'>End If</span></b>
 
   
 
    <span style='color:#707070;'>'Powtarzające się terminy - dotyczące dni tygodnia (wpis w kolumnie D)</span>
 
   
 
        <span style='color:#707070;'>'czwartek co dwa tygodnie począwszy od 07.01.2021</span>
 
        <b><span style='color:#1f1c1b;'>If </span></b>t <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>5</span> <b><span style='color:#000000;'>AND</span></b> (d - <span style='color:#0095ff;'>DateSerial</span>(<span style='color:#ff0000;'>2021</span>, <span style='color:#ff0000;'>1</span>, <span style='color:#ff0000;'>7</span>)) <b><span style='color:#000000;'>Mod</span></b> <span style='color:#ff0000;'>14</span> <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>0</span> <b><span style='color:#1f1c1b;'>Then</span></b>
 
            <b><span style='color:#000000;'>Call</span></b> CellFormat( oSht.getCellByPosition(<span style='color:#ff0000;'>3</span>, k + Licz), <span style='color:#ff0000;'>&quot;Spotkanie w czwartek (co dwa tygodnie)&quot;</span>, <span style='color:#0095ff;'>RGB</span>(<span style='color:#ff0000;'>204</span>, <span style='color:#ff0000;'>204</span>, <span style='color:#ff0000;'>204</span>) )
 
            Licz <span style='color:#000080;'>=</span> Licz + <span style='color:#ff0000;'>1</span>
 
        <b><span style='color:#1f1c1b;'>End If</span></b>
 
   
 
        <span style='color:#707070;'>'pierwszy czwartek miesiąca</span>
 
        <b><span style='color:#1f1c1b;'>If </span></b>t <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>5</span> <b><span style='color:#000000;'>AND</span></b>  <span style='color:#0095ff;'>Day</span>(d) &gt;= <span style='color:#ff0000;'>1</span> <b><span style='color:#000000;'>AND</span></b> <span style='color:#0095ff;'>Day</span>(d) &lt;= <span style='color:#ff0000;'>7</span> <b><span style='color:#1f1c1b;'>Then</span></b>
 
            <b><span style='color:#000000;'>Call</span></b> CellFormat( oSht.getCellByPosition(<span style='color:#ff0000;'>3</span>, k + Licz), <span style='color:#ff0000;'>&quot;Pierwszy czwartek miesiąca&quot;</span>, <span style='color:#0095ff;'>RGB</span>(<span style='color:#ff0000;'>255</span>, <span style='color:#ff0000;'>255</span>, <span style='color:#ff0000;'>204</span>) )
 
            Licz <span style='color:#000080;'>=</span> Licz + <span style='color:#ff0000;'>1</span>
 
        <b><span style='color:#1f1c1b;'>End If</span></b>
 
   
 
        <span style='color:#707070;'>'ostatni czwartek miesiąca</span>
 
        <b><span style='color:#1f1c1b;'>If </span></b>t <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>5</span> <b><span style='color:#000000;'>AND</span></b> <span style='color:#0095ff;'>Day</span>(d) &gt;= MonthEnd-<span style='color:#ff0000;'>6</span> <b><span style='color:#000000;'>AND</span></b> <span style='color:#0095ff;'>Day</span>(d) &lt;= MonthEnd <b><span style='color:#1f1c1b;'>Then</span></b>
 
            <b><span style='color:#000000;'>Call</span></b> CellFormat( oSht.getCellByPosition(<span style='color:#ff0000;'>3</span>, k + Licz), <span style='color:#ff0000;'>&quot;Ostatni czwartek miesiąca&quot;</span>, <span style='color:#0095ff;'>RGB</span>(<span style='color:#ff0000;'>123</span>, <span style='color:#ff0000;'>204</span>, <span style='color:#ff0000;'>153</span>) )
 
            Licz <span style='color:#000080;'>=</span> Licz + <span style='color:#ff0000;'>1</span>
 
        <b><span style='color:#1f1c1b;'>End If</span></b>
 
   
 
    <span style='color:#707070;'>'Końcowe formatowanie wpisu - scalanie komórek</span>
 
        <b><span style='color:#1f1c1b;'>If </span></b>Licz &gt; <span style='color:#ff0000;'>1</span> <b><span style='color:#1f1c1b;'>Then</span></b>
 
            oSht.getCellRangeByPosition(<span style='color:#ff0000;'>0</span>, k, <span style='color:#ff0000;'>0</span>, k + Licz - <span style='color:#ff0000;'>1</span>).merge(True) <span style='color:#707070;'>'scalamy komórki w kolumnach: A,B,C,E,F,G,H</span>
 
            oSht.getCellRangeByPosition(<span style='color:#ff0000;'>1</span>, k, <span style='color:#ff0000;'>1</span>, k + Licz - <span style='color:#ff0000;'>1</span>).merge(True)
 
            oSht.getCellRangeByPosition(<span style='color:#ff0000;'>2</span>, k, <span style='color:#ff0000;'>2</span>, k + Licz - <span style='color:#ff0000;'>1</span>).merge(True)
 
            oSht.getCellRangeByPosition(<span style='color:#ff0000;'>4</span>, k, <span style='color:#ff0000;'>4</span>, k + Licz - <span style='color:#ff0000;'>1</span>).merge(True)
 
            oSht.getCellRangeByPosition(<span style='color:#ff0000;'>5</span>, k, <span style='color:#ff0000;'>5</span>, k + Licz - <span style='color:#ff0000;'>1</span>).merge(True)
 
            oSht.getCellRangeByPosition(<span style='color:#ff0000;'>6</span>, k, <span style='color:#ff0000;'>6</span>, k + Licz - <span style='color:#ff0000;'>1</span>).merge(True)
 
            oSht.getCellRangeByPosition(<span style='color:#ff0000;'>7</span>, k, <span style='color:#ff0000;'>7</span>, k + Licz - <span style='color:#ff0000;'>1</span>).merge(True)
 
            k <span style='color:#000080;'>=</span> k + Licz
 
        <b><span style='color:#1f1c1b;'>Else</span></b>
 
            k <span style='color:#000080;'>=</span> k + <span style='color:#ff0000;'>1</span>
 
        <b><span style='color:#1f1c1b;'>End If</span></b>
 
        d <span style='color:#000080;'>=</span> d + <span style='color:#ff0000;'>1</span>
 
    <b><span style='color:#1f1c1b;'>Loop</span></b>
 
   
 
    oColumns <span style='color:#000080;'>=</span> oSht.getColumns() <span style='color:#707070;'>'uchwyt do kolumn pierwszego arkusza</span>
 
    oColumns.getByIndex(<span style='color:#ff0000;'>2</span>).Width <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>500</span> <span style='color:#707070;'>'szerokość kolumny C - 5 mm</span>
 
    oColumns.getByIndex(<span style='color:#ff0000;'>3</span>).Width <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>7000</span> <span style='color:#707070;'>'szerokość kolumny D - 70 mm</span>
 
    oColumns.getByIndex(<span style='color:#ff0000;'>4</span>).Width <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>1500</span> <span style='color:#707070;'>'szerokość kolumny E - 15 mm</span>
 
    oColumns.getByIndex(<span style='color:#ff0000;'>5</span>).Width <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>7000</span> <span style='color:#707070;'>'szerokość kolumny F - 70 mm</span>
 
    oColumns.getByIndex(<span style='color:#ff0000;'>6</span>).Width <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>1500</span> <span style='color:#707070;'>'szerokość kolumny G - 15 mm</span>
 
    oColumns.getByIndex(<span style='color:#ff0000;'>7</span>).Width <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>7000</span> <span style='color:#707070;'>'szerokość kolumny H - 70 mm</span>
 
    MsgBox <span style='color:#ff0000;'>&quot;Ukończono!&quot;</span>
 
<b><span style='color:#1f1c1b;'>End Sub</span></b></span>
 
  
<span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>CellFormat(oCll <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, CellString <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>String</span>, CellColor <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>)
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> CellRow <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>
 
    CellRow <span style='color:#000080;'>=</span> oCll.getCellAddress().Row
 
    oCll.Spreadsheet.getRows().getByIndex(CellRow).Height <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>1000</span> <span style='color:#707070;'>'ustawia wysokość wiersza równą 10 mm</span>
 
    oCll.<span style='color:#000080;'>String</span> <span style='color:#000080;'>=</span> CellString <span style='color:#707070;'>'wpisuje tekst</span>
 
    oCll.CellBackColor <span style='color:#000080;'>=</span> CellColor <span style='color:#707070;'>'ustawia kolor tła komórki</span>
 
    oCll.CharHeight <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>11</span> <span style='color:#707070;'>'rozmiar czcionki</span>
 
    oCll.CharWeight <span style='color:#000080;'>=</span> com.sun.star.awt.FontWeight.NORMAL <span style='color:#707070;'>'zwykła czcionka</span>
 
    oCll.setPropertyValue( <span style='color:#ff0000;'>&quot;IsTextWrapped&quot;</span>, True ) <span style='color:#707070;'>'zawija tekst automatycznie</span>
 
    oCll.HoriJustify <span style='color:#000080;'>=</span> com.sun.star.table.CellHoriJustify.CENTER <span style='color:#707070;'>'wyśrodkowanie tekstu w poziomie</span>
 
    oCll.VertJustify <span style='color:#000080;'>=</span> com.sun.star.table.CellVertJustify.CENTER <span style='color:#707070;'>'wyśrodkowanie tekstu w pionie</span>
 
    <b><span style='color:#000000;'>Call</span></b> RangeBorder(oCll, <span style='color:#0095ff;'>RGB</span>(<span style='color:#ff0000;'>0</span>, <span style='color:#ff0000;'>0</span>, <span style='color:#ff0000;'>0</span>), <span style='color:#ff0000;'>0</span>, <span style='color:#ff0000;'>26</span>) <span style='color:#707070;'>'obramowanie komórki</span>
 
<b><span style='color:#1f1c1b;'>End Sub</span></b></span>
 
  
<span style="color: green"><b><span style='color:#1f1c1b;'>Function </span></b>MonthDays(myYear <b><span style='color:#1f1c1b;'>As</span></b> <span style='color:#000080;'>Long</span>, myMonth <b><span style='color:#1f1c1b;'>As</span></b> <span style='color:#000080;'>Long</span>) <b><span style='color:#1f1c1b;'>As</span></b> <span style='color:#000080;'>Long</span>
+
Przykłady własnych funkcji i procedur
    <span style='color:#707070;'>'znajduje liczbę dni w miesiącu danego roku</span>
+
*[[Funkcje arkusza]]
    <b><span style='color:#1f1c1b;'>If </span></b>myMonth <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>12</span> <b><span style='color:#1f1c1b;'>Then</span></b>
+
*[[Funkcje tekstowe]]
        MonthDays <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>31</span>
+
*[[Funkcje liczbowe]]
    <b><span style='color:#1f1c1b;'>Else</span></b>
+
*[[Funkcje informacyjne]]
        MonthDays <span style='color:#000080;'>=</span> <span style='color:#0095ff;'>Day</span>(DateSerial(myYear, myMonth + <span style='color:#ff0000;'>1</span>, <span style='color:#ff0000;'>1</span>) - <span style='color:#ff0000;'>1</span>)
+
*[[Funkcje daty i czasu]]
    <b><span style='color:#1f1c1b;'>End If</span></b>
+
*[[Funkcje tablicowe]]
<b><span style='color:#1f1c1b;'>End Function</span></b></span>
+
*[[Funkcje komórki]]
 
+
*[[Funkcje zakresu komórek]]
<span style="color: green"><b><span style='color:#1f1c1b;'>Function </span></b>DzienTygodnia(Dzien <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Date</span>) <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>String</span>
+
*[[Sortowanie zakresu komórek]]
    <span style='color:#707070;'>'funkcja zwraca nazwę dnia tygodnia</span>
+
*[[Wykresy]]
    <b><span style='color:#1f1c1b;'>Dim</span></b> aNazwy() <span style='color:#707070;'>'deklaracja pustej tablicy</span>
 
    <span style='color:#707070;'>'funkcja <span style='color:#0095ff;'>Array</span>() tworzy tablicę typu Variant i numeruje elementy od 0</span>
 
    aNazwy <span style='color:#000080;'>=</span> <span style='color:#0095ff;'>Array</span>(<span style='color:#ff0000;'>&quot;niedziela&quot;</span>, <span style='color:#ff0000;'>&quot;poniedziałek&quot;</span>, <span style='color:#ff0000;'>&quot;wtorek&quot;</span>, <span style='color:#ff0000;'>&quot;środa&quot;</span>, <span style='color:#ff0000;'>&quot;czwartek&quot;</span>, <span style='color:#ff0000;'>&quot;piątek&quot;</span>, <span style='color:#ff0000;'>&quot;sobota&quot;</span>)
 
    DzienTygodnia <span style='color:#000080;'>=</span> aNazwy( <span style='color:#0095ff;'>Weekday</span>(Dzien) - <span style='color:#ff0000;'>1</span> )
 
<b><span style='color:#1f1c1b;'>End Function</span></b></span>
 
 
 
<span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>RangeBorder(oRng <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, LColor <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>, LStyle <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>, LWidth <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>)
 
    <span style='color:#707070;'>'LStyle: 0-ciągła, 1-kropkowana, 2-przerywana, 3-podwójna, ... ([https://api.libreoffice.org/docs/idl/ref/namespacecom_1_1sun_1_1star_1_1table_1_1BorderLineStyle.html LINK])</span>
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> oBorder <b><span style='color:#1f1c1b;'>as</span></b> New com.sun.star.table.BorderLine2
 
    oBorder.<b><span style='color:#000000;'>Color</span></b> <span style='color:#000080;'>=</span> LColor
 
    oBorder.LineStyle <span style='color:#000080;'>=</span> LStyle
 
    <b><span style='color:#1f1c1b;'>If </span></b>LStyle <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>3</span> <b><span style='color:#1f1c1b;'>Then</span></b> <span style='color:#707070;'>'DOUBLE</span>
 
    <span style='color:#707070;'>'InnerLineWidth - szerokość linii wewnętrznej w 1/100 mm (gdy równa zero, rysowana jest tylko jedna linia)</span>
 
    <span style='color:#707070;'>'LineDistance - odległość między linią wewnętrzną i linią zewnętrzną w 1/100 mm</span>
 
    <span style='color:#707070;'>'OuterLineWidth - szerokość pojedynczej linii lub szerokość linii zewnętrznej w 1/100 mm</span>
 
    <span style='color:#707070;'>'(gdy równa zero, żadna linia nie jest rysowana)</span>
 
        oBorder.InnerLineWidth <span style='color:#000080;'>=</span> LWidth
 
        oBorder.LineDistance <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>2</span> * LWidth
 
        oBorder.OuterLineWidth <span style='color:#000080;'>=</span> LWidth
 
    <b><span style='color:#1f1c1b;'>Else</span></b>
 
    <span style='color:#707070;'>'LineWidth - szerokość linii w 1/100 mm (gdy równa zero, żadna linia nie jest rysowana)</span>
 
    <span style='color:#707070;'>'szerokość linii możemy ustawić dla LStyle <span style='color:#000080;'>=</span>  0, 1, 2, 14, 16, 17</span>
 
        oBorder.LineWidth <span style='color:#000080;'>=</span> LWidth
 
    <b><span style='color:#1f1c1b;'>End If</span></b>
 
    <b><span style='color:#1f1c1b;'>With </span></b>oRng
 
        .TopBorder <span style='color:#000080;'>=</span> oBorder
 
        .RightBorder <span style='color:#000080;'>=</span> oBorder
 
        .BottomBorder <span style='color:#000080;'>=</span> oBorder
 
        .LeftBorder <span style='color:#000080;'>=</span> oBorder
 
    <b><span style='color:#1f1c1b;'>End With</span></b>
 
<b><span style='color:#1f1c1b;'>End Sub</span></b></span>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
[[LibreOffice Calc – makra | <b>LibreOffice Calc – makra</b>]]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[[Henryk Dąbrowski | <b>Strona główna</b>]]
 
  
  
 +
Przykłady bardziej złożonych procedur
 +
*[[Terminarz]]
 +
*[[Funkcje rzeczywiste]]
  
  

Wersja z 16:25, 27 cze 2021

22.03.2020




Celem tej strony nie jest nauczenie kogokolwiek pisania makr w arkuszu LibreOffice. Tego typu strony Czytelnik łatwo znajdzie w sieci. Jeśli możemy o pewnej formie nauki mówić, to o nauce poprzez proste, dobrze objaśnione przykłady. Jednak taka forma nauki musi z konieczności zakładać pewne minimum wiedzy. Mam jedynie nadzieję, że strona ta pomoże osobom, które mają pewne pojęcie o programowaniu napisać własne, proste makra. To własnie takie makra są najczęściej potrzebne i uwalniają nas od żmudnej pracy z arkuszem.


Polecane strony:

LibreOffice (LINK)

Apache OpenOffice BASIC Programming Guide (LINK)

Andrew Pitonyak (LINK)




Przykłady własnych funkcji i procedur


Przykłady bardziej złożonych procedur