Różnica pomiędzy stronami "Komórki" i "Kolumny i wiersze"

Z Henryk Dąbrowski
(Różnica między stronami)
Przejdź do nawigacji Przejdź do wyszukiwania
m (1 wersja)
 
m (1 wersja)
 
Linia 1: Linia 1:
<div style="text-align:right; font-size: 130%; font-style: italic; font-weight: bold;">03.05.2020</div>
+
<div style="text-align:right; font-size: 130%; font-style: italic; font-weight: bold;">22.03.2020</div>
  
  
Linia 5: Linia 5:
  
  
== Uchwyt do komórek przez indeks lub przez nazwę, wpisywanie danych do komórek ==
 
  
<span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Komorki1()
+
== Dodawanie i kasowanie kolumn i wierszy ==
    <span style='color:#707070;'>'wpisywanie do komórek liczb, tekstu i formuł</span>
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> oSht <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> oA1 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oB2 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oC3 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
 
    oSht = ThisComponent.getSheets().getByIndex(<span style='color:#ff0000;'>0</span>) <span style='color:#707070;'>'uchwyt do pierwszego arkusza</span>
 
    ThisComponent.CurrentController.setActiveSheet(oSht) <span style='color:#707070;'>'uaktywnienie pierwszego arkusza</span>
 
    oSht.getColumns().insertByIndex(<span style='color:#ff0000;'>0</span>, <span style='color:#ff0000;'>4</span>) <span style='color:#707070;'>'dodajemy cztery kolumny na pozycję pierwszą</span>
 
   
 
    <span style='color:#707070;'>'komórki możemy uchwycić przez indeks lub przez nazwę, dla komórek A1, B2 i C3 będziemy mieli:</span>
 
    oA1 = oSht.getCellByPosition(<span style='color:#ff0000;'>0</span>, <span style='color:#ff0000;'>0</span>) <span style='color:#707070;'>'uchwyt do komórki A1 przez indeks</span>
 
    oB2 = oSht.getCellRangebyName(<span style='color:#ff0000;'>&quot;B2&quot;</span>) <span style='color:#707070;'>'uchwyt do komórki B2 przez nazwę</span>
 
    oC3 = oSht.getCellByPosition(<span style='color:#ff0000;'>2</span>, <span style='color:#ff0000;'>2</span>) <span style='color:#707070;'>'uchwyt do komórki C3 przez indeks</span>
 
   
 
    <span style='color:#707070;'>'mając dostęp do komórek możemy wpisywać do nich liczby, tekst i formuły;</span>
 
    <span style='color:#707070;'>'zauważmy, że nie musimy korzystać ze zdefiniowanych wyżej obiektów oA1, oB2 i oC3</span>
 
    oSht.getCellByPosition(<span style='color:#ff0000;'>0</span>, <span style='color:#ff0000;'>0</span>).Value = <span style='color:#ff0000;'>3</span>/<span style='color:#ff0000;'>2</span> <span style='color:#707070;'>'wpisujemy liczbę do komórki A1 - nie korzystamy z obiektu oA1</span>
 
    oB2.<span style='color:#000080;'>String</span> = <span style='color:#ff0000;'>&quot;komórka B2&quot;</span> <span style='color:#707070;'>'wpisujemy tekst do komórki B2</span>
 
    oC3.Formula = <span style='color:#ff0000;'>&quot;=2*A1&quot;</span> <span style='color:#707070;'>'wpisujemy do komórki C3 formułę, która podwaja wartość komórki A1</span>
 
   
 
    MsgBox oSht.getCellRangebyName(<span style='color:#ff0000;'>&quot;B2&quot;</span>).<span style='color:#000080;'>String</span>
 
    MsgBox oC3.Value <span style='color:#707070;'>'mamy dostęp do wartości, która wynika z wpisanej do komórki formuły</span>
 
<b><span style='color:#1f1c1b;'>End Sub</span></b></span>
 
 
 
 
 
Uchwyt przez nazwę jest bardzo czytelny, zdefiniowanie obiektu związanego z komórką skraca kod i&nbsp;upraszcza dostęp do komórki, ale uchwyt przez indeks ma ogromną przewagę: umożliwia przetwarzanie komórek za pomocą instrukcji For ... Next i&nbsp;z&nbsp;tego prostego powodu jest najczęściej stosowany.
 
 
 
 
 
 
 
 
 
 
 
== Sprawdzanie zawartości komórki i określanie jej typu ==
 
 
 
<span style="color: green"><b><span style='color:#1f1c1b;'>Function </span></b>TypKomorki(oCell <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>) <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>String</span>
 
    <span style='color:#707070;'>'informuje o rodzaju danych zapisanych w komórce ([http://www.openoffice.org/api/docs/common/ref/com/sun/star/table/CellContentType.html LINK1]), ([https://api.libreoffice.org/docs/idl/ref/namespacecom_1_1sun_1_1star_1_1table.html LINK2])</span>
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> s <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>String</span>
 
    <b><span style='color:#1f1c1b;'>Select Case</span></b> oCell.<b><span style='color:#1f1c1b;'>Type </span></b>
 
    <b><span style='color:#1f1c1b;'>Case</span></b> com.sun.star.table.CellContentType.EMPTY
 
        s = <span style='color:#ff0000;'>&quot;Pusta&quot;</span>
 
    <b><span style='color:#1f1c1b;'>Case</span></b> com.sun.star.table.CellContentType.VALUE
 
        s = <span style='color:#ff0000;'>&quot;Liczba&quot;</span>
 
    <b><span style='color:#1f1c1b;'>Case</span></b> com.sun.star.table.CellContentType.TEXT
 
        s = <span style='color:#ff0000;'>&quot;Tekst&quot;</span>
 
    <b><span style='color:#1f1c1b;'>Case</span></b> com.sun.star.table.CellContentType.FORMULA
 
        s = <span style='color:#ff0000;'>&quot;Formuła&quot;</span>
 
    <b><span style='color:#1f1c1b;'>End Select</span></b>
 
    TypKomorki = s
 
<b><span style='color:#1f1c1b;'>End Function</span></b></span>
 
 
 
<span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Komorki2()
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> oSht <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
 
    oSht <span style='color:#000080;'>=</span> ThisComponent.getSheets().getByIndex(<span style='color:#ff0000;'>0</span>) <span style='color:#707070;'>'uchwyt do pierwszego arkusza</span>
 
    ThisComponent.CurrentController.setActiveSheet(oSht) <span style='color:#707070;'>'aktywacja pierwszego arkusza</span>
 
    MsgBox <span style='color:#0095ff;'>TypKomorki</span>( oSht.getCellByPosition(<span style='color:#ff0000;'>0</span>,<span style='color:#ff0000;'>0</span>) ) <span style='color:#707070;'>'A1</span>
 
    MsgBox <span style='color:#0095ff;'>TypKomorki</span>( oSht.getCellByPosition(<span style='color:#ff0000;'>1</span>,<span style='color:#ff0000;'>1</span>) ) <span style='color:#707070;'>'B2</span>
 
    MsgBox <span style='color:#0095ff;'>TypKomorki</span>( oSht.getCellByPosition(<span style='color:#ff0000;'>2</span>,<span style='color:#ff0000;'>2</span>) ) <span style='color:#707070;'>'C3</span>
 
    MsgBox <span style='color:#0095ff;'>TypKomorki</span>( oSht.getCellByPosition(<span style='color:#ff0000;'>3</span>,<span style='color:#ff0000;'>3</span>) ) <span style='color:#707070;'>'D4</span>
 
<b><span style='color:#1f1c1b;'>End Sub</span></b></span>
 
 
 
 
 
 
 
 
 
 
 
== Wpisywanie daty do komórki ==
 
 
 
Datę możemy wpisać do komórki używając dwóch funkcji: '''DateSerial()''' i '''DateValue()'''. Parametrami dla funkcji DateSerial() są liczby całkowite: rok, miesiąc i dzień danej daty i wywołujemy ją następująco '''DateSerial(YYYY, MM, DD)'''. Parametrem dla funkcji '''DateValue()''' jest tekst zawierający te same dane i wywołujemy tę funkcję następująco '''DateValue("YYYY&#8209;RR&#8209;DD")'''.
 
 
 
<span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Komorki3()
 
    <span style='color:#707070;'>'wpisywanie daty</span>
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> oSht <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oA5 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oA6 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
 
    oSht <span style='color:#000080;'>=</span> ThisComponent.getSheets().getByIndex(<span style='color:#ff0000;'>0</span>) <span style='color:#707070;'>'uchwyt do pierwszego arkusza</span>
 
    ThisComponent.CurrentController.setActiveSheet(oSht) <span style='color:#707070;'>'aktywacja pierwszego arkusza</span>
 
    oA5 <span style='color:#000080;'>=</span> oSht.getCellByPosition(<span style='color:#ff0000;'>0</span>,<span style='color:#ff0000;'>4</span>) <span style='color:#707070;'>'uchwyt do komórki A5</span>
 
    oA6 <span style='color:#000080;'>=</span> oSht.getCellByPosition(<span style='color:#ff0000;'>0</span>,<span style='color:#ff0000;'>5</span>) <span style='color:#707070;'>'uchwyt do komórki A6</span>
 
    oA5.Value <span style='color:#000080;'>=</span> <span style='color:#0095ff;'>DateSerial</span>(<span style='color:#ff0000;'>2000</span>, <span style='color:#ff0000;'>1</span>, <span style='color:#ff0000;'>1</span>) <span style='color:#707070;'>'A5</span>
 
    oA6.<span style='color:#000080;'>String</span> <span style='color:#000080;'>=</span> <span style='color:#0095ff;'>DateSerial</span>(<span style='color:#ff0000;'>2000</span>, <span style='color:#ff0000;'>1</span>, <span style='color:#ff0000;'>1</span>) <span style='color:#707070;'>'A6</span>
 
    MsgBox oA5.Value + <span style='color:#ff0000;'>7</span> <span style='color:#707070;'>'36533 - liczba odpowiadająca dacie 08.01.2000</span>
 
    MsgBox oA6.<span style='color:#000080;'>String</span> + <span style='color:#ff0000;'>7</span> <span style='color:#707070;'>'ciąg znaków &quot;01.01.20007&quot;</span>
 
    <span style='color:#707070;'>'formuły wpisane do arkusza, które wykonują takie same obliczenia jak wyżej, nie zwrócą otrzymanych wyżej wartości</span>
 
    oSht.getCellByPosition(<span style='color:#ff0000;'>1</span>,<span style='color:#ff0000;'>4</span>).Formula <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>&quot;=A5 + 7&quot;</span> <span style='color:#707070;'>'36533 - wynik w komórce B5</span>
 
    oSht.getCellByPosition(<span style='color:#ff0000;'>1</span>,<span style='color:#ff0000;'>5</span>).Formula <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>&quot;=A6 + 7&quot;</span> <span style='color:#707070;'>'36533 - wynik w komórce B6</span>
 
<b><span style='color:#1f1c1b;'>End Sub</span></b></span>
 
 
 
 
 
Datę wpisujemy jako wartość (.Value). W&nbsp;komórce pojawi się liczba całkowita odpowiadająca danej dacie i&nbsp;dopiero zmiana formatu komórki (Formatuj komórki &rarr; Liczby &rarr; Kategoria &rarr; Data) sprawi, że zostanie pokazana data w&nbsp;wybranym formacie.
 
 
 
Wpisanie daty jako ciąg znaków (.String) jest możliwe. Data zostanie zapisana w&nbsp;komórce jako tekst (standardowo dosunięty do lewej krawędzi komórki). Oczywiście wszelkie obliczenia na tak zapisanej dacie nie będą już możliwe. Wynika to stąd, że kod makra jest precyzyjny – musimy określić typ wartości zapisanej w&nbsp;komórce (.Value, .String, .Formula), do której się odwołujemy.
 
 
 
W&nbsp;arkuszu wygląda to zupełnie inaczej, bo formuła odwołuje się do komórki, ale w&nbsp;komórce może być wpisana liczba, tekst lub formuła. Problem ten rozwiązano, przyjmując zasadę, że w&nbsp;arkuszu wszystko, co da się zinterpretować jako liczba, należy tak interpretować.
 
 
 
Dlatego w&nbsp;arkuszu zostanie wykonane dodawanie: "777" + 1 = 778, jak również dodawanie: "01.01.2000" + 7 = 8.01.2000
 
 
 
 
 
 
 
 
 
 
 
== Wpisywanie daty i&nbsp;formatowanie postaci, w&nbsp;jakiej zostanie wyświetlona ==
 
 
 
Możemy wpisać do komórki datę i&nbsp;ustawić format, w&nbsp;jakim zostanie wyświetlona. W&nbsp;tym celu należy dla komórki, do której wpisujemy datę, określić jej własność '''NumberFormat'''. Poniżej podaję jakie liczby trzeba wpisać dla najbardziej popularnych formatów daty w&nbsp;przypadku języka polskiego:
 
 
 
36 – 31.12.1999<br/>
 
37 – 31.12.99<br/>
 
38 – piątek 31 grudnia 1999<br/>
 
76 – 31 grudnia 1999<br/>
 
81 – 31 grudnia 1999 r.<br/>
 
84 – 1999-12-31<br/>
 
 
 
 
 
Inne wartości łatwo znaleźć rejestrując makro i&nbsp;zmieniając formatowanie komórki. W&nbsp;kodzie zarejestrowanego makra odnajdziemy zawsze tekst '''NumberFormatValue''' i&nbsp;odpowiednią liczbę poniżej. Przykład formatowania:
 
  
  <span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Komorki4()
+
  <span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Kolumny_i_Wiersze_1()
     <span style='color:#707070;'>'wpisywanie daty i formatowanie postaci w jakiej zostanie wyświetlona</span>
+
     <span style='color:#707070;'>'dodawanie i kasowanie kolumn i wierszy</span>
     <b><span style='color:#1f1c1b;'>Dim</span></b> oSht <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oA7 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
+
     <b><span style='color:#1f1c1b;'>Dim</span></b> oSheets <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>
     oSht <span style='color:#000080;'>=</span> ThisComponent.getSheets().getByIndex(<span style='color:#ff0000;'>0</span>) <span style='color:#707070;'>'uchwyt do pierwszego arkusza</span>
+
     oSheets = ThisComponent.getSheets() <span style='color:#707070;'>'uchwyt do skoroszytu</span>
     ThisComponent.CurrentController.setActiveSheet(oSht) <span style='color:#707070;'>'aktywacja pierwszego arkusza</span>
+
    oSht = oSheets.getByIndex(<span style='color:#ff0000;'>0</span>) <span style='color:#707070;'>'uchwyt do pierwszego arkusza</span>
    oA7 <span style='color:#000080;'>=</span> oSht.getCellByPosition(<span style='color:#ff0000;'>0</span>,<span style='color:#ff0000;'>6</span>) <span style='color:#707070;'>'uchwyt do komórki A7</span>
+
     oSht.getColumns().insertByIndex(<span style='color:#ff0000;'>3</span>, <span style='color:#ff0000;'>1</span>) <span style='color:#707070;'>'dodaje jedną (drugi parametr) kolumnę na pozycję czwartą (pierwszy parametr)</span>
    oA7.Value <span style='color:#000080;'>=</span> <span style='color:#0095ff;'>DateValue</span>(<span style='color:#ff0000;'>&quot;1999-12-31&quot;</span>) <span style='color:#707070;'>'36525 - liczba odpowiadająca dacie 31.12.1999</span>
+
    oSht.getRows().removeByIndex(<span style='color:#ff0000;'>5</span>, <span style='color:#ff0000;'>2</span>) <span style='color:#707070;'>'usuwa dwa wiersze (drugi parametr): szósty i siódmy wiersz (pierwszy parametr)</span>
     oA7.NumberFormat <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>36</span>
+
    MsgBox <span style='color:#ff0000;'>&quot;Liczba kolumn w arkuszu: &quot;</span> &amp; oSht.getColumns().getCount() <span style='color:#707070;'>'1024</span>
 +
     MsgBox <span style='color:#ff0000;'>&quot;Liczba wierszy w arkuszu: &quot;</span> &amp; oSht.getRows().getCount() <span style='color:#707070;'>'1048576</span>
 
  <b><span style='color:#1f1c1b;'>End Sub</span></b></span>
 
  <b><span style='color:#1f1c1b;'>End Sub</span></b></span>
  
  
  
 +
Widzimy, że w przypadku wielu operacji na kolumnach określonego arkusza (powiedzmy pierwszego) kod może ulec uproszczeniu, gdy zdefiniujemy obiekt:<br/>
 +
&nbsp;&nbsp;<b>oColumns = ThisComponent.getSheets().getByIndex(0).getColumns()</b><br/>
 +
Obiekt <b>oColumns</b> jest uchwytem do zbioru wszystkich kolumn w danym arkuszu.<br/><br/>
  
 
+
Podobnie w przypadku wielu operacji na wierszach określonego arkusza (powiedzmy o nazwie "Test") przydatny jest obiekt:<br/>
== Wpisywanie wartości logicznej do komórki ==
+
&nbsp;&nbsp;<b>oRows = ThisComponent.getSheets().getByName("Test").getRows()</b><br/>
 
+
Obiekt <b>oRows</b> jest uchwytem do zbioru wszystkich wierszy w danym arkuszu.<br/>
<span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Komorki5()
 
    <span style='color:#707070;'>'wpisywanie wartości logicznej</span>
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> oSht <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
 
    oSht <span style='color:#000080;'>=</span> ThisComponent.getSheets().getByIndex(<span style='color:#ff0000;'>0</span>) <span style='color:#707070;'>'uchwyt do pierwszego arkusza</span>
 
    ThisComponent.CurrentController.setActiveSheet(oSht) <span style='color:#707070;'>'aktywacja pierwszego arkusza</span>
 
    oSht.getCellByPosition(<span style='color:#ff0000;'>0</span>,<span style='color:#ff0000;'>9</span>).Value <span style='color:#000080;'>=</span> True <span style='color:#707070;'>'A10</span>
 
    oSht.getCellByPosition(<span style='color:#ff0000;'>0</span>,<span style='color:#ff0000;'>10</span>).Value <span style='color:#000080;'>=</span> False <span style='color:#707070;'>'A11</span>
 
    MsgBox <span style='color:#ff0000;'>&quot;W komórkach A10 i A11 widoczne są liczby: -1 i 0&quot;</span>
 
    <span style='color:#707070;'>'formatujemy komórki, aby zamiast liczb -1 i 0 zostały wyświetlone słowa PRAWDA / TRUE i FAŁSZ / FALSE</span>
 
    oSht.getCellByPosition(<span style='color:#ff0000;'>0</span>,<span style='color:#ff0000;'>9</span>).NumberFormat <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>99</span> <span style='color:#707070;'>'A10</span>
 
    oSht.getCellByPosition(<span style='color:#ff0000;'>0</span>,<span style='color:#ff0000;'>10</span>).NumberFormat <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>99</span> <span style='color:#707070;'>'A11</span>
 
<b><span style='color:#1f1c1b;'>End Sub</span></b></span>
 
 
 
 
 
Wartości logiczne wpisujemy tylko jako wartość (.Value). Standardowo wartości logicznej PRAWDA odpowiada liczba -1, a&nbsp;wartości logicznej FAŁSZ odpowiada liczba 0. Należy pamiętać, że każda liczba różna od zera zostanie zinterpretowana jako wartość logiczna PRAWDA, a&nbsp;tylko liczbie zero odpowiada wartość logiczna FAŁSZ.
 
 
 
  
  
  
  
== Wpisywanie tekstu do komórki i podstawowe formatowanie ==
 
  
Wpisany do komórki tekst wymaga zazwyczaj ustawienia wielu rożnych opcji formatowania. W tym przykładzie podajemy tylko podstawowe, a w następnym podamy kolejne.
+
== Uchwyt do kolumn i wierszy oraz zmiana ich rozmiarów i właściwości ==
  
  <span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Komorki6()
+
  <span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Kolumny_i_Wiersze_2()
     <b><span style='color:#1f1c1b;'>Dim</span></b> oCll <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
+
     <b><span style='color:#1f1c1b;'>Dim</span></b> oSheets <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>
    oCll <span style='color:#000080;'>=</span> ThisComponent.getSheets().getByIndex(<span style='color:#ff0000;'>0</span>).getCellByPosition(<span style='color:#ff0000;'>2</span>, <span style='color:#ff0000;'>2</span>)
+
     <b><span style='color:#1f1c1b;'>Dim</span></b> oColumns <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oRows <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
     oCll.<span style='color:#000080;'>String</span> <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>&quot;abcd&quot;</span>
+
    oSheets = ThisComponent.getSheets() <span style='color:#707070;'>'uchwyt do skoroszytu</span>
    oCll.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;'>'kolor tła komórki</span>
+
    oSht = oSheets.getByIndex(<span style='color:#ff0000;'>0</span>) <span style='color:#707070;'>'uchwyt do pierwszego arkusza</span>
      
+
     oColumns = oSht.getColumns() <span style='color:#707070;'>'uchwyt do kolumn pierwszego arkusza</span>
    <span style='color:#707070;'>'ustawienie tekstu w poziomie (STANDARD, LEFT, CENTER, RIGHT, BLOCK, REPEAT) ([https://www.openoffice.org/api/docs/common/ref/com/sun/star/table/CellHoriJustify.html LINK1]), ([https://api.libreoffice.org/docs/idl/ref/namespacecom_1_1sun_1_1star_1_1table.html LINK2])</span>
+
     oRows = oSht.getRows() <span style='color:#707070;'>'uchwyt do wierszy pierwszego arkusza</span>
     oCll.HoriJustify <span style='color:#000080;'>=</span> com.sun.star.table.CellHoriJustify.RIGHT
 
 
      
 
      
     <span style='color:#707070;'>'ustawienie tekstu w pionie (STANDARD, TOP, CENTER, BOTTOM) ([https://www.openoffice.org/api/docs/common/ref/com/sun/star/table/CellVertJustify.html LINK1]), ([https://api.libreoffice.org/docs/idl/ref/namespacecom_1_1sun_1_1star_1_1table.html LINK2])</span>
+
     oColumns.getByIndex(<span style='color:#ff0000;'>0</span>).Width = <span style='color:#ff0000;'>4000</span> <span style='color:#707070;'>'wybiera pierwszą kolumnę przez indeks i ustawia jej szerokość równą 40 mm</span>
    oCll.VertJustify <span style='color:#000080;'>=</span> com.sun.star.table.CellVertJustify.BOTTOM
+
    oRows.getByIndex(<span style='color:#ff0000;'>0</span>).Height = <span style='color:#ff0000;'>1500</span> <span style='color:#707070;'>'wybiera pierwszy wiersz przez indeks i ustawia jego wysokość równą 15 mm</span>
 +
    oRows.getByIndex(<span style='color:#ff0000;'>0</span>).CellBackColor = <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;'>'wybiera pierwszy wiersz przez indeks i ustawia kolor tła wiersza</span>
 
      
 
      
     <span style='color:#707070;'>'orientacja tekstu</span>
+
     oColumns.getByName(<span style='color:#ff0000;'>&quot;F&quot;</span>).IsVisible = False <span style='color:#707070;'>'wybiera szóstą kolumnę przez nazwę i ją ukrywa</span>
    oCll.RotateAngle <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>9000</span> <span style='color:#707070;'>'90 stopni obrotu w lewo</span>
+
    oRows.getByIndex(<span style='color:#ff0000;'>5</span>).IsVisible = False <span style='color:#707070;'>'wybiera szósty wiersz przez indeks i go ukrywa</span>
 
  <b><span style='color:#1f1c1b;'>End Sub</span></b></span>
 
  <b><span style='color:#1f1c1b;'>End Sub</span></b></span>
  
Linia 180: Linia 59:
  
  
== Wpisywanie tekstu do komórki i dalsze formatowanie ==
+
== Zmiana nazwy kolumny na indeks kolumny ==
 
 
<span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Komorki7()
 
    <span style='color:#707070;'>'wpisywanie tekstu do komórki i formatowanie komórki</span>
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> oSht <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>, oA15 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
 
    oSht <span style='color:#000080;'>=</span> ThisComponent.getSheets().getByIndex(<span style='color:#ff0000;'>0</span>) <span style='color:#707070;'>'uchwyt do pierwszego arkusza</span>
 
    ThisComponent.CurrentController.setActiveSheet(oSht) <span style='color:#707070;'>'aktywacja pierwszego arkusza</span>
 
    oRow <span style='color:#000080;'>=</span> oSht.getRows().getByIndex(<span style='color:#ff0000;'>14</span>) <span style='color:#707070;'>'uchwyt do wiersza o indeksie 14</span>
 
    oRow.Height <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>1500</span> <span style='color:#707070;'>'ustawia wysokość wiersza równą 15 mm</span>
 
    oA15 <span style='color:#000080;'>=</span> oSht.getCellByPosition(<span style='color:#ff0000;'>0</span>,<span style='color:#ff0000;'>14</span>) <span style='color:#707070;'>'uchwyt do komórki A15</span>
 
    oA15.<span style='color:#000080;'>String</span> <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>&quot;Komórka A15&quot;</span>
 
    oA15.CellBackColor <span style='color:#000080;'>=</span> <span style='color:#0095ff;'>RGB</span>(<span style='color:#ff0000;'>204</span>, <span style='color:#ff0000;'>153</span>, <span style='color:#ff0000;'>102</span>) <span style='color:#707070;'>'kolor tła komórki</span>
 
    oA15.CharHeight <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>14</span> <span style='color:#707070;'>'rozmiar czcionki</span>
 
   
 
    <span style='color:#707070;'>'grubość czcionki (DONTKNOW, THIN, ULTRALIGHT, LIGHT, SEMILIGHT, NORMAL, SEMIBOLD, BOLD, ULTRABOLD, BLACK) ([http://www.openoffice.org/api/docs/common/ref/com/sun/star/style/CharacterProperties.html LINK1]), ([http://www.openoffice.org/api/docs/common/ref/com/sun/star/awt/FontWeight.html LINK2])</span>
 
    oA15.CharWeight <span style='color:#000080;'>=</span> com.sun.star.awt.FontWeight.BOLD
 
   
 
    oA15.setPropertyValue( <span style='color:#ff0000;'>&quot;IsTextWrapped&quot;</span>, True ) <span style='color:#707070;'>'zawija tekst automatycznie</span>
 
    oA15.HoriJustify <span style='color:#000080;'>=</span> com.sun.star.table.CellHoriJustify.CENTER <span style='color:#707070;'>'wyśrodkowanie tekstu w poziomie</span>
 
    oA15.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;'>End Sub</span></b></span>
 
 
 
 
 
 
 
 
 
 
 
== Formatowanie komórki liczbowej ==
 
 
 
Funkcja oblicza liczbę całkowitą, która określa, jak zostanie sformatowana komórka liczbowa. Najłatwiej kod formatu (parametr sNumFormat) uzyskać wykorzystując okno "Formatuj komórki". Wybieramy potrzebne ustawienia (liczba miejsc po przecinku, separator tysięcy itd.), kopiujemy otrzymany kod i&nbsp;wykorzystujemy go jako parametr sNumFormat. ([https://wiki.openoffice.org/wiki/Documentation/BASIC_Guide/Formatting_Spreadsheet_Documents LINK])
 
  
  <span style="color: green"><b><span style='color:#1f1c1b;'>Function </span></b>NumberFormatId( sNumFormat <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>String</span>, sLanguage <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>String</span>, sCountry <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>String</span> ) <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>
+
  <span style="color: green"><b><span style='color:#1f1c1b;'>Function </span></b>ColumnNameToNum(ColName <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>String</span>) <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>
     <span style='color:#707070;'>'Dla USA: sLanguage=&quot;en&quot;, sCountry=&quot;us&quot;</span>
+
     <span style='color:#707070;'>'zamienia nazwę kolumny na jej indeks</span>
     <span style='color:#707070;'>'Przykładowo: sNumFormat=&quot;# ###,00&quot;</span>
+
     ColumnNameToNum = ThisComponent.getCurrentController().getActiveSheet(). _
    <span style='color:#707070;'>'Sposób użycia: Cell.NumberFormat <span style='color:#000080;'>=</span> NumberFormatId(&quot;# ###,00&quot;, &quot;pl&quot;, &quot;pl&quot;)</span>
+
                                    getCellRangeByName(ColName &amp; <span style='color:#ff0000;'>&quot;1&quot;</span>).getCellAddress().Column
    <b><span style='color:#1f1c1b;'>Dim</span></b> LocalSettings <b><span style='color:#1f1c1b;'>As</span></b> New com.sun.star.lang.Locale
 
   
 
    LocalSettings.Language <span style='color:#000080;'>=</span> sLanguage
 
    LocalSettings.Country <span style='color:#000080;'>=</span> sCountry
 
    NumberFormatId <span style='color:#000080;'>=</span> ThisComponent.NumberFormats.queryKey(sNumFormat, LocalSettings, True)
 
    <b><span style='color:#1f1c1b;'>If </span></b>NumberFormatId <span style='color:#000080;'>=</span> -<span style='color:#ff0000;'>1</span> <b><span style='color:#1f1c1b;'>Then</span></b>
 
        NumberFormatId <span style='color:#000080;'>=</span> ThisComponent.NumberFormats.addNew(sNumFormat, LocalSettings)
 
    <b><span style='color:#1f1c1b;'>End If</span></b>
 
 
  <b><span style='color:#1f1c1b;'>End Function</span></b></span>
 
  <b><span style='color:#1f1c1b;'>End Function</span></b></span>
  
  <span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Komorki8()
+
  <span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Kolumny_i_Wiersze_ColumnNameToNum()
     <b><span style='color:#1f1c1b;'>Dim</span></b> oA1 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
+
     MsgBox <span style='color:#0095ff;'>ColumnNameToNum</span>(<span style='color:#ff0000;'>&quot;AA&quot;</span>) <span style='color:#707070;'>'26</span>
    oA1 <span style='color:#000080;'>=</span> ThisComponent.getSheets().getByIndex(<span style='color:#ff0000;'>0</span>).getCellRangeByName(<span style='color:#ff0000;'>&quot;A1&quot;</span>) <span style='color:#707070;'>'uchwyt do komórki A1 przez nazwę</span>
 
    oA1.Value <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>12345.6789</span>
 
    oA1.NumberFormat <span style='color:#000080;'>=</span> <span style='color:#0095ff;'>NumberFormatId</span>(<span style='color:#ff0000;'>&quot;# ###,00&quot;</span>, <span style='color:#ff0000;'>&quot;pl&quot;</span>, <span style='color:#ff0000;'>&quot;pl&quot;</span>)
 
 
  <b><span style='color:#1f1c1b;'>End Sub</span></b></span>
 
  <b><span style='color:#1f1c1b;'>End Sub</span></b></span>
  
Linia 235: Linia 75:
  
  
== Odczytywanie zawartości komórki i&nbsp;operacje na takich danych ==
+
== Zmiana indeksu kolumny na nazwę kolumny ==
  
  <span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Komorki9()
+
  <span style="color: green"><b><span style='color:#1f1c1b;'>Function </span></b>ColumnNumToName(nCol <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;'>String</span>
    <span style='color:#707070;'>'odczytywanie wartości komórki i opercje na tych wartościach</span>
+
        <span style='color:#707070;'>'zamienia indeks kolumny na jej nazwę</span>
    <b><span style='color:#1f1c1b;'>Dim</span></b> oSht <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
+
        <b><span style='color:#1f1c1b;'>Dim</span></b> s <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>String</span>
    <b><span style='color:#1f1c1b;'>Dim</span></b> oA1 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oA2 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oA3 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
+
        s <span style='color:#000080;'>=</span> ThisComponent.getCurrentController().getActiveSheet().getCellByPosition(nCol, <span style='color:#ff0000;'>1</span>).AbsoluteName <span style='color:#707070;'>'np. $Arkusz1.$A$2</span>
    <b><span style='color:#1f1c1b;'>Dim</span></b> oC1 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oC2 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
+
        ColumnNumToName <span style='color:#000080;'>=</span> <span style='color:#0095ff;'>Split</span>(s, <span style='color:#ff0000;'>&quot;$&quot;</span>)(<span style='color:#ff0000;'>2</span>)
    <b><span style='color:#1f1c1b;'>Dim</span></b> x <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Double</span>, y <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Double</span>
+
  <b><span style='color:#1f1c1b;'>End Function</span></b></span>
    <b><span style='color:#1f1c1b;'>Dim</span></b> s <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>String</span>
 
    oSht <span style='color:#000080;'>=</span> ThisComponent.getSheets().getByIndex(<span style='color:#ff0000;'>0</span>) <span style='color:#707070;'>'uchwyt do pierwszego arkusza</span>
 
    ThisComponent.CurrentController.setActiveSheet(oSht) <span style='color:#707070;'>'aktywacja pierwszego arkusza</span>
 
    oA1 <span style='color:#000080;'>=</span> oSht.getCellByPosition(<span style='color:#ff0000;'>0</span>, <span style='color:#ff0000;'>0</span>) <span style='color:#707070;'>'uchwyty do komórek</span>
 
    oA2 <span style='color:#000080;'>=</span> oSht.getCellRangebyName(<span style='color:#ff0000;'>&quot;A2&quot;</span>)
 
    oA3 <span style='color:#000080;'>=</span> oSht.getCellByPosition(<span style='color:#ff0000;'>0</span>, <span style='color:#ff0000;'>2</span>)
 
    oC1 <span style='color:#000080;'>=</span> oSht.getCellRangebyName(<span style='color:#ff0000;'>&quot;C1&quot;</span>)
 
    oC2 <span style='color:#000080;'>=</span> oSht.getCellByPosition(<span style='color:#ff0000;'>2</span>, <span style='color:#ff0000;'>1</span>)
 
   
 
    oA1.Value <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>5</span> <span style='color:#707070;'>'zapisujemy liczbę w komórce A1</span>
 
    oA2.<span style='color:#000080;'>String</span> <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>&quot;To jest formuła: &quot;</span> <span style='color:#707070;'>'zapisujemy tekst w komórce A2</span>
 
    oA3.Formula <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>&quot;=2*A1&quot;</span> <span style='color:#707070;'>'zapisujemy formułę w komórce A3</span>
 
   
 
    x <span style='color:#000080;'>=</span> oA1.Value <span style='color:#707070;'>'odczytujemy liczbę zapisaną w komórce A1</span>
 
    s <span style='color:#000080;'>=</span> oA2.<span style='color:#000080;'>String</span> <span style='color:#707070;'>'odczytujemy tekst zapisany w komórce A2</span>
 
    y <span style='color:#000080;'>=</span> oA3.Value <span style='color:#707070;'>'odczytujemy LICZBĘ wyliczoną z formuły zapisanej w komórce A3</span>
 
   
 
    oC1.Value <span style='color:#000080;'>=</span> x + y <span style='color:#707070;'>'zapisujemy sumę liczb z komórek A1 i A3</span>
 
    oC2.<span style='color:#000080;'>String</span> <span style='color:#000080;'>=</span> s &amp; oA3.Formula <span style='color:#707070;'>'zapisujemy połączone teksty: z komórki A2 i odczytaną formułę z komórki A3</span>
 
<b><span style='color:#1f1c1b;'>End Sub</span></b></span>
 
 
 
 
 
Jeszcze jeden przykład:
 
 
 
<span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Komorki10()
 
    <span style='color:#707070;'>'operacje na wartościach odczytanych z komórek</span>
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> oSht <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> oA1 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oA2 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oA3 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oA4 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> oB1 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oB2 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oB3 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oB4 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
 
    oSht <span style='color:#000080;'>=</span> ThisComponent.getSheets().getByIndex(<span style='color:#ff0000;'>0</span>) <span style='color:#707070;'>'uchwyt do pierwszego arkusza</span>
 
    ThisComponent.CurrentController.setActiveSheet(oSht) <span style='color:#707070;'>'aktywacja pierwszego arkusza</span>
 
    oSht.getColumns().insertByIndex(<span style='color:#ff0000;'>0</span>, <span style='color:#ff0000;'>3</span>) <span style='color:#707070;'>'dodajemy trzy kolumny na pozycję pierwszą</span>
 
    oA1 <span style='color:#000080;'>=</span> oSht.getCellRangebyName(<span style='color:#ff0000;'>&quot;A1&quot;</span>) <span style='color:#707070;'>'uchwyt do komórki A1 przez nazwę</span>
 
    oA2 <span style='color:#000080;'>=</span> oSht.getCellRangebyName(<span style='color:#ff0000;'>&quot;A2&quot;</span>)
 
    oA3 <span style='color:#000080;'>=</span> oSht.getCellRangebyName(<span style='color:#ff0000;'>&quot;A3&quot;</span>)
 
    oA4 <span style='color:#000080;'>=</span> oSht.getCellRangebyName(<span style='color:#ff0000;'>&quot;A4&quot;</span>)
 
    oB1 <span style='color:#000080;'>=</span> oSht.getCellRangebyName(<span style='color:#ff0000;'>&quot;B1&quot;</span>)
 
    oB2 <span style='color:#000080;'>=</span> oSht.getCellRangebyName(<span style='color:#ff0000;'>&quot;B2&quot;</span>)
 
    oB3 <span style='color:#000080;'>=</span> oSht.getCellRangebyName(<span style='color:#ff0000;'>&quot;B3&quot;</span>)
 
    oB4 <span style='color:#000080;'>=</span> oSht.getCellRangebyName(<span style='color:#ff0000;'>&quot;B4&quot;</span>)
 
   
 
    <span style='color:#707070;'>'wpisywanie danych</span>
 
    oA1.<span style='color:#000080;'>String</span> <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>&quot;abc&quot;</span>
 
    oA2.<span style='color:#000080;'>String</span> <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>&quot;123&quot;</span>
 
    oB1.Value <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>5</span>
 
    oB2.Value <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>7</span>
 
   
 
    <span style='color:#707070;'>'wpisywanie sumy odczytanych wartości do nowej komórki ([https://wiki.openoffice.org/wiki/Documentation/BASIC_Guide/Operators LINK])</span>
 
    oA3.<span style='color:#000080;'>String</span> <span style='color:#000080;'>=</span> oA1.<span style='color:#000080;'>String</span> &amp; oA2.<span style='color:#000080;'>String</span>
 
    oB3.Value <span style='color:#000080;'>=</span> oB1.Value + oB2.Value
 
   
 
    <span style='color:#707070;'>'operator + można stosować do tekstu, a operator &amp; do liczb - zobacz rezultat ([https://wiki.openoffice.org/wiki/Documentation/BASIC_Guide/Operators LINK])</span>
 
    oA4.<span style='color:#000080;'>String</span> <span style='color:#000080;'>=</span> oA1.<span style='color:#000080;'>String</span> + oA2.<span style='color:#000080;'>String</span>
 
    oB4.Value <span style='color:#000080;'>=</span> oB1.Value &amp; oB2.Value
 
<b><span style='color:#1f1c1b;'>End Sub</span></b></span>
 
 
 
 
 
 
 
 
 
 
 
== Ważne własności komórki ==
 
 
 
Dysponując uchwytem do komórki, możemy uzyskać uchwyt do arkusza, z&nbsp;którego pochodzi komórka. Poza tym możemy poznać indeks tego arkusza oraz indeks kolumny i&nbsp;wiersza, w&nbsp;których komórka jest położona.
 
 
 
<span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Komorki11()
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> oSht <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oCll <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
 
    oCll <span style='color:#000080;'>=</span> ThisComponent.getSheets().getByIndex(<span style='color:#ff0000;'>0</span>).getCellByPosition(<span style='color:#ff0000;'>1</span>, <span style='color:#ff0000;'>2</span>)
 
    oSht <span style='color:#000080;'>=</span> oCll.Spreadsheet <span style='color:#707070;'>'uchwyt do arkusza komórki</span>
 
    MsgBox oSht.getName()
 
   
 
    <span style='color:#707070;'>'indeks arkusza, kolumny i wiersza</span>
 
    MsgBox oCll.getCellAddress().Sheet
 
    MsgBox oCll.getCellAddress().Column
 
    MsgBox oCll.getCellAddress().Row
 
<b><span style='color:#1f1c1b;'>End Sub</span></b></span>
 
 
 
 
 
 
 
 
 
 
 
== Obramowanie wokół komórek ==
 
 
 
Procedura pozwala utworzyć obramowanie wokół komórki. Zauważmy od razu, że procedurę można łatwo rozbudować:
 
::* w przypadku LStyle = 3 (linia podwójna) możemy ustawić szerokość każdej z linii i odległość między nimi – dodając nowe parametry możemy w pełni wykorzystać te możliwości
 
::* zamiast jednego obiektu oBorder możemy utworzyć cztery różne obiekty: oBorder1, oBorder2, oBorder3, oBorder4 i przypisać je osobno do każdej krawędzi komórki: górnej, prawej, dolnej i lewej
 
 
 
 
 
Przedstawiamy wariant najprostszy, wystarczający w większości przypadków, ale warto pamiętać o możliwości łatwego napisania bardziej skomplikowanych wersji.
 
 
 
<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 New</span></b> com.sun.star.table.BorderLine2
 
    oBorder.Color <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>
 
 
 
<span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Komorki12()
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> k <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>, n <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> oSht <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oRng <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
 
    oSht <span style='color:#000080;'>=</span> ThisComponent.getCurrentController().getActiveSheet() <span style='color:#707070;'>'uchwyt do aktywnego arkusza</span>
 
    oSht.getColumns().insertByIndex(<span style='color:#ff0000;'>0</span>, <span style='color:#ff0000;'>20</span>) <span style='color:#707070;'>'dodajemy dwadzieścia kolumn na pozycję pierwszą</span>
 
    <b><span style='color:#1f1c1b;'>For </span></b>n <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>0</span> <b><span style='color:#1f1c1b;'>To</span></b> <span style='color:#ff0000;'>4</span>
 
        oSht.getCellByPosition(<span style='color:#ff0000;'>2</span>*n, <span style='color:#ff0000;'>0</span>).Value <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>20</span>*n
 
        <b><span style='color:#1f1c1b;'>For </span></b>k <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>0</span> <b><span style='color:#1f1c1b;'>To</span></b> <span style='color:#ff0000;'>17</span>
 
            oSht.getCellByPosition(n, <span style='color:#ff0000;'>2</span>*k+<span style='color:#ff0000;'>2</span>).Value <span style='color:#000080;'>=</span> k
 
            oRng <span style='color:#000080;'>=</span> oSht.getCellRangeByPosition(<span style='color:#ff0000;'>2</span>*n, <span style='color:#ff0000;'>2</span>*k+<span style='color:#ff0000;'>2</span>, <span style='color:#ff0000;'>2</span>*n, <span style='color:#ff0000;'>2</span>*k+<span style='color:#ff0000;'>2</span>)
 
            <b><span style='color:#000000;'>Call</span></b> RangeBorder(oRng, <span style='color:#0095ff;'>RGB</span>(<span style='color:#ff0000;'>0</span>, <span style='color:#ff0000;'>0</span>, <span style='color:#ff0000;'>0</span>), k, <span style='color:#ff0000;'>20</span>*n)
 
        <b><span style='color:#1f1c1b;'>Next </span></b>k
 
    <b><span style='color:#1f1c1b;'>Next </span></b>n
 
<b><span style='color:#1f1c1b;'>End Sub</span></b></span>
 
 
 
 
 
 
 
 
 
 
 
== Kasowanie zawartości komórki ==
 
 
 
Nim wykonamy kasowanie zawartości komórki, musimy ustalić co chcemy skasować. Różnym typom zawartości przypisane zostały różne liczby:<br/>
 
VALUE (1) - liczby niesformatowane jako data i czas<br/>
 
DATETIME (2) - liczby sformatowane jako data i czas<br/>
 
STRING (4) - tekst<br/>
 
ANNOTATION (8) - komentarze<br/>
 
FORMULA (16) - formuły<br/>
 
Zobacz więcej: ([http://www.openoffice.org/api/docs/common/ref/com/sun/star/sheet/CellFlags.html LINK])
 
 
 
Ustalamy, co chcemy skasować, wybieramy odpowiednie liczby i&nbsp;sumujemy. Znaleziona suma jest parametrem dla metody '''clearContents'''.
 
 
 
<span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Komorki13()
 
    <span style='color:#707070;'>'usuwanie zawartości komórki</span>
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> oSht <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oCll <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
 
    oSht <span style='color:#000080;'>=</span> ThisComponent.getSheets().getByIndex(<span style='color:#ff0000;'>0</span>) <span style='color:#707070;'>'uchwyt do pierwszego arkusza</span>
 
    oCll <span style='color:#000080;'>=</span> oSht.getCellRangeByName(<span style='color:#ff0000;'>&quot;A1&quot;</span>) <span style='color:#707070;'>'tworzymy uchwyt do komórki</span>
 
    oCll.clearContents(<span style='color:#ff0000;'>7</span>) <span style='color:#707070;'>'usuwa liczby, liczby sformatowane jako data i czas oraz tekst</span>
 
<b><span style='color:#1f1c1b;'>End Sub</span></b></span>
 
 
 
 
 
 
 
 
 
 
 
== Kopiowanie komórek ==
 
 
 
Musimy przygotować uchwyty do każdej z&nbsp;komórek (kopiowanej i&nbsp;docelowej), a następnie wywołać metodę arkusza '''copyRange''' z&nbsp;odpowiednimi parametrami ([https://www.openoffice.org/api/docs/common/ref/com/sun/star/sheet/XCellRangeMovement.html#copyRange LINK]).
 
 
 
<span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Komorki14()
 
    <span style='color:#707070;'>'kopiowanie komórki Cll1 do komórki Cll2</span>
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> oSht <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oCll1 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oCll2 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
 
    oSht <span style='color:#000080;'>=</span> ThisComponent.getSheets().getByIndex(<span style='color:#ff0000;'>0</span>) <span style='color:#707070;'>'uchwyt do pierwszego arkusza</span>
 
   
 
    <span style='color:#707070;'>'tworzymy uchwyty do obydwu komórek:</span>
 
    oCll1 <span style='color:#000080;'>=</span> oSht.getCellRangeByName(<span style='color:#ff0000;'>&quot;A1&quot;</span>)
 
    oCll2 <span style='color:#000080;'>=</span> oSht.getCellRangeByName(<span style='color:#ff0000;'>&quot;B2&quot;</span>)
 
   
 
    <span style='color:#707070;'>'kopiowanie wymaga wywołania metody arkusza '''copyRange''' z następującymi parametrami:</span>
 
    oSht.copyRange( oCll2.getCellAddress(), oCll1.getRangeAddress() )
 
<b><span style='color:#1f1c1b;'>End Sub</span></b></span>
 
 
 
 
 
 
 
Gdybyśmy z&nbsp;jakiegoś powodu nie mieli uchwytu do arkusza, z&nbsp;którego wzięliśmy komórki, to możemy zrobić tak:
 
 
 
<span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Komorki15()
 
    <span style='color:#707070;'>'kopiowanie komórki Cll1 do komórki Cll2</span>
 
    <b><span style='color:#1f1c1b;'>Dim</span></b> oCll1 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oCll2 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
 
    oCll1 <span style='color:#000080;'>=</span> ThisComponent.getSheets().getByIndex(<span style='color:#ff0000;'>0</span>).getCellRangeByName(<span style='color:#ff0000;'>&quot;A1&quot;</span>)
 
    oCll2 <span style='color:#000080;'>=</span> ThisComponent.getSheets().getByIndex(<span style='color:#ff0000;'>0</span>).getCellRangeByName(<span style='color:#ff0000;'>&quot;B2&quot;</span>)
 
    oCll1.Spreadsheet.copyRange( oCll2.getCellAddress(), oCll1.getRangeAddress() )
 
  <b><span style='color:#1f1c1b;'>End Sub</span></b></span>
 
 
 
 
 
Jeżeli chcemy komórkę przekopiować do innego arkusza, to postępujemy analogicznie:
 
  
  <span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Komorki16()
+
  <span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Kolumny_i_Wiersze_ColumnNumToName()
     <span style='color:#707070;'>'kopiowanie komórki Cll1 pierwszego arkusza do komórki Cll2 drugiego arkusza</span>
+
     MsgBox <span style='color:#0095ff;'>ColumnNumToName</span>(<span style='color:#ff0000;'>0</span>) <span style='color:#707070;'>'A</span>
    <b><span style='color:#1f1c1b;'>Dim</span></b> oSht1 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oSht2 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oCll1 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oCll2 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
+
     MsgBox <span style='color:#0095ff;'>ColumnNumToName</span>(<span style='color:#ff0000;'>1023</span>) <span style='color:#707070;'>'AMJ</span>
    oSht1 <span style='color:#000080;'>=</span> ThisComponent.getSheets().getByIndex(<span style='color:#ff0000;'>0</span>) <span style='color:#707070;'>'uchwyt do pierwszego arkusza</span>
 
     oSht2 <span style='color:#000080;'>=</span> ThisComponent.getSheets().getByIndex(<span style='color:#ff0000;'>1</span>) <span style='color:#707070;'>'uchwyt do drugiego arkusza</span>
 
   
 
    <span style='color:#707070;'>'tworzymy uchwyty do obydwu komórek:</span>
 
    oCll1 <span style='color:#000080;'>=</span> oSht1.getCellRangeByName(<span style='color:#ff0000;'>&quot;A1&quot;</span>)
 
    oCll2 <span style='color:#000080;'>=</span> oSht2.getCellRangeByName(<span style='color:#ff0000;'>&quot;B2&quot;</span>)
 
   
 
    <span style='color:#707070;'>'tak samo, jak to uczyniliśmy wyżej, wywołujemy metodę '''copyRange''' (dowolnego arkusza):</span>
 
    oSht1.copyRange( oCll2.getCellAddress(), oCll1.getRangeAddress() )
 
 
  <b><span style='color:#1f1c1b;'>End Sub</span></b></span>
 
  <b><span style='color:#1f1c1b;'>End Sub</span></b></span>
  
Linia 451: Linia 93:
  
  
== Przesuwanie komórek ==
+
== Kasowanie wierszy i kolumn ==
 
 
Przesuwanie komórek z&nbsp;jednego miejsca arkusza w&nbsp;inne lub z&nbsp;jednego arkusza na drugi wykonujemy dokładnie tak samo, jak kopiowanie. Musimy tym razem użyć metody arkusza '''moveRange''' ([https://www.openoffice.org/api/docs/common/ref/com/sun/star/sheet/XCellRangeMovement.html#moveRange LINK]). Dlatego poprzestaniemy na jednym przykładzie.
 
  
Musimy przygotować uchwyty do każdej z&nbsp;komórek (kopiowanej i&nbsp;docelowej), a&nbsp;następnie wywołać metodę arkusza '''moveRange''' z&nbsp;odpowiednimi parametrami.
+
Kasowanie wierszy (kolumn) wykonujemy od końca. Przykładowo:
  
  <span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Komorki17()
+
  <span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>KasujWierszeParzyste()
     <span style='color:#707070;'>'przesuwanie komórki Cll1 w miejsce komórki Cll2</span>
+
     <span style='color:#707070;'>'kasuje wiersze parzyste do wiersza 502</span>
     <b><span style='color:#1f1c1b;'>Dim</span></b> oSht <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oCll1 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oCll2 <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
+
     <b><span style='color:#1f1c1b;'>Dim</span></b> oRows <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
     oSht <span style='color:#000080;'>=</span> ThisComponent.getSheets().getByIndex(<span style='color:#ff0000;'>0</span>) <span style='color:#707070;'>'uchwyt do pierwszego arkusza</span>
+
    <b><span style='color:#1f1c1b;'>Dim</span></b> k <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>
   
+
     oRows = ThisComponent.getCurrentController().getActiveSheet().getRows()
    <span style='color:#707070;'>'tworzymy uchwyty do obydwu komórek:</span>
+
    <b><span style='color:#1f1c1b;'>For </span></b>k = <span style='color:#ff0000;'>501</span> <b><span style='color:#1f1c1b;'>To</span></b> <span style='color:#ff0000;'>1</span> <b><span style='color:#1f1c1b;'>Step</span></b> -<span style='color:#ff0000;'>2</span> <span style='color:#707070;'>'liczbie 1 odpowiada drugi wiersz</span>
    oCll1 <span style='color:#000080;'>=</span> oSht.getCellRangeByName(<span style='color:#ff0000;'>&quot;A1&quot;</span>)
+
        oRows.removeByIndex(k, <span style='color:#ff0000;'>1</span>)
    oCll2 <span style='color:#000080;'>=</span> oSht.getCellRangeByName(<span style='color:#ff0000;'>&quot;B2&quot;</span>)
+
     <b><span style='color:#1f1c1b;'>Next </span></b>k
      
 
    <span style='color:#707070;'>'przesuwanie wymaga wywołania metody arkusza '''moveRange''' z następującymi parametrami:</span>
 
    oSht.moveRange( oCll2.getCellAddress(), oCll1.getRangeAddress() )
 
 
  <b><span style='color:#1f1c1b;'>End Sub</span></b></span>
 
  <b><span style='color:#1f1c1b;'>End Sub</span></b></span>
  
  
 
+
  <span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>KasujWierszeNieparzyste()
 
+
     <span style='color:#707070;'>'kasuje wiersze nieparzyste do wiersza 501</span>
 
+
     <b><span style='color:#1f1c1b;'>Dim</span></b> oRows <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
== Usuwanie komórek ==
+
    <b><span style='color:#1f1c1b;'>Dim</span></b> k <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>
 
+
    oRows = ThisComponent.getCurrentController().getActiveSheet().getRows()
Metoda arkusza '''removeRange''' usuwa "fizycznie" wybraną komórkę (jeśli można tak powiedzieć o&nbsp;komórce, która istnieje tylko wirtualnie). Dlatego musimy określić jakie dodatkowe działanie zostanie wykonane, aby w&nbsp;arkuszu nie pozostała "dziura". Mamy do wyboru następujące opcje:
+
    <b><span style='color:#1f1c1b;'>For </span></b>k = <span style='color:#ff0000;'>500</span> <b><span style='color:#1f1c1b;'>To</span></b> <span style='color:#ff0000;'>0</span> <b><span style='color:#1f1c1b;'>Step</span></b> -<span style='color:#ff0000;'>2</span> <span style='color:#707070;'>'liczbie 0 odpowiada pierwszy wiersz</span>
 
+
        oRows.removeByIndex(k, <span style='color:#ff0000;'>1</span>)
::*NONE - '''removeRange''' nie robi nic
+
    <b><span style='color:#1f1c1b;'>Next </span></b>k
::*UP - komórka zostaje usunięta, komórki leżące poniżej zostaną przesunięte w górę
 
::*LEFT - komórka zostaje usunięta, komórki leżące na prawo zostaną przesunięte w lewo
 
::*ROWS - komórka zostaje usunięta, wiersze leżące poniżej zostaną przesunięte w górę
 
::*COLUMNS - komórka zostaje usunięta, kolumny leżące na prawo zostaną przesunięte w lewo
 
 
 
 
 
Opcja ROWS odpowiada usunięciu wiersza, w&nbsp;którym położona była komórka. Opcja COLUMNS odpowiada usunięciu kolumny, w&nbsp;której położona była komórka. ([https://www.openoffice.org/api/docs/common/ref/com/sun/star/sheet/XCellRangeMovement.html#removeRange LINK1]), ([https://wiki.openoffice.org/wiki/Documentation/BASIC_Guide/Cells_and_Ranges LINK2])
 
 
 
  <span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Komorki18()
 
     <span style='color:#707070;'>'usuwanie komórki B2</span>
 
     <b><span style='color:#1f1c1b;'>Dim</span></b> oSht <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oCll <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>
 
    oSht <span style='color:#000080;'>=</span> ThisComponent.getSheets().getByIndex(<span style='color:#ff0000;'>0</span>) <span style='color:#707070;'>'uchwyt do pierwszego arkusza</span>
 
    oCll <span style='color:#000080;'>=</span> oSht.getCellRangeByName(<span style='color:#ff0000;'>&quot;B2&quot;</span>) <span style='color:#707070;'>'uchwyt do komórki B2</span>
 
    oSht.removeRange( oCll.getRangeAddress(), com.sun.star.sheet.CellDeleteMode.UP ) <span style='color:#707070;'>'metoda '''removeRange''' z parametrem UP</span>
 
 
  <b><span style='color:#1f1c1b;'>End Sub</span></b></span>
 
  <b><span style='color:#1f1c1b;'>End Sub</span></b></span>
  
Linia 501: Linia 124:
 
== Polecane strony internetowe ==
 
== Polecane strony internetowe ==
  
[https://wiki.openoffice.org/wiki/Documentation/BASIC_Guide/Cells_and_Ranges BASIC Guide – Cells and Ranges]
+
[https://wiki.openoffice.org/wiki/Documentation/BASIC_Guide/Rows_and_Columns BASIC Guide – Rows and Columns]
 
 
[https://wiki.openoffice.org/wiki/Spreadsheet_common#Working_with_cells Spreadsheet common – Working with cells]
 
  
[http://www.openoffice.org/api/docs/common/ref/com/sun/star/table/CellProperties.html Apache OpenOffice service CellProperties]
+
[https://wiki.openoffice.org/wiki/Spreadsheet_common#Row.2C_Column_selection Spreadsheet common – Working with rows, columns]
  
  

Aktualna wersja na dzień 22:36, 18 wrz 2022

22.03.2020




Dodawanie i kasowanie kolumn i wierszy

Sub Kolumny_i_Wiersze_1()
    'dodawanie i kasowanie kolumn i wierszy
    Dim oSheets as Object, oSht as Object
    oSheets = ThisComponent.getSheets() 'uchwyt do skoroszytu
    oSht = oSheets.getByIndex(0) 'uchwyt do pierwszego arkusza
    oSht.getColumns().insertByIndex(3, 1) 'dodaje jedną (drugi parametr) kolumnę na pozycję czwartą (pierwszy parametr)
    oSht.getRows().removeByIndex(5, 2) 'usuwa dwa wiersze (drugi parametr): szósty i siódmy wiersz (pierwszy parametr)
    MsgBox "Liczba kolumn w arkuszu: " & oSht.getColumns().getCount() '1024
    MsgBox "Liczba wierszy w arkuszu: " & oSht.getRows().getCount() '1048576
End Sub


Widzimy, że w przypadku wielu operacji na kolumnach określonego arkusza (powiedzmy pierwszego) kod może ulec uproszczeniu, gdy zdefiniujemy obiekt:
  oColumns = ThisComponent.getSheets().getByIndex(0).getColumns()
Obiekt oColumns jest uchwytem do zbioru wszystkich kolumn w danym arkuszu.

Podobnie w przypadku wielu operacji na wierszach określonego arkusza (powiedzmy o nazwie "Test") przydatny jest obiekt:
  oRows = ThisComponent.getSheets().getByName("Test").getRows()
Obiekt oRows jest uchwytem do zbioru wszystkich wierszy w danym arkuszu.



Uchwyt do kolumn i wierszy oraz zmiana ich rozmiarów i właściwości

Sub Kolumny_i_Wiersze_2()
    Dim oSheets as Object, oSht as Object
    Dim oColumns as Object, oRows as Object
    oSheets = ThisComponent.getSheets() 'uchwyt do skoroszytu
    oSht = oSheets.getByIndex(0) 'uchwyt do pierwszego arkusza
    oColumns = oSht.getColumns() 'uchwyt do kolumn pierwszego arkusza
    oRows = oSht.getRows() 'uchwyt do wierszy pierwszego arkusza
    
    oColumns.getByIndex(0).Width = 4000 'wybiera pierwszą kolumnę przez indeks i ustawia jej szerokość równą 40 mm
    oRows.getByIndex(0).Height = 1500 'wybiera pierwszy wiersz przez indeks i ustawia jego wysokość równą 15 mm
    oRows.getByIndex(0).CellBackColor = RGB(255, 0, 0) 'wybiera pierwszy wiersz przez indeks i ustawia kolor tła wiersza
    
    oColumns.getByName("F").IsVisible = False 'wybiera szóstą kolumnę przez nazwę i ją ukrywa
    oRows.getByIndex(5).IsVisible = False 'wybiera szósty wiersz przez indeks i go ukrywa
End Sub


Uwaga:

oRows.getByIndex(0).CellBackColor = -1 'ustawia brak koloru



Zmiana nazwy kolumny na indeks kolumny

Function ColumnNameToNum(ColName as String) as Long
    'zamienia nazwę kolumny na jej indeks
    ColumnNameToNum = ThisComponent.getCurrentController().getActiveSheet(). _
                                    getCellRangeByName(ColName & "1").getCellAddress().Column
End Function
Sub Kolumny_i_Wiersze_ColumnNameToNum()
    MsgBox ColumnNameToNum("AA") '26
End Sub



Zmiana indeksu kolumny na nazwę kolumny

Function ColumnNumToName(nCol as Long) as String
        'zamienia indeks kolumny na jej nazwę
        Dim s as String
        s = ThisComponent.getCurrentController().getActiveSheet().getCellByPosition(nCol, 1).AbsoluteName 'np. $Arkusz1.$A$2
        ColumnNumToName = Split(s, "$")(2)
End Function
Sub Kolumny_i_Wiersze_ColumnNumToName()
    MsgBox ColumnNumToName(0) 'A
    MsgBox ColumnNumToName(1023) 'AMJ
End Sub



Kasowanie wierszy i kolumn

Kasowanie wierszy (kolumn) wykonujemy od końca. Przykładowo:

Sub KasujWierszeParzyste()
    'kasuje wiersze parzyste do wiersza 502
    Dim oRows as Object
    Dim k as Long
    oRows = ThisComponent.getCurrentController().getActiveSheet().getRows()
    For k = 501 To 1 Step -2 'liczbie 1 odpowiada drugi wiersz
        oRows.removeByIndex(k, 1)
    Next k
End Sub


Sub KasujWierszeNieparzyste()
    'kasuje wiersze nieparzyste do wiersza 501
    Dim oRows as Object
    Dim k as Long
    oRows = ThisComponent.getCurrentController().getActiveSheet().getRows()
    For k = 500 To 0 Step -2 'liczbie 0 odpowiada pierwszy wiersz
        oRows.removeByIndex(k, 1)
    Next k
End Sub



Polecane strony internetowe

BASIC Guide – Rows and Columns

Spreadsheet common – Working with rows, columns





LibreOffice Calc – makra                   Strona główna