Szukaj pustej komórki

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO

Szukaj pustej komórki

Postprzez qsc » Pn lis 18, 2019 10:31 am

Cześć,

Potrzebuję znaleźć pierwszą pustą komórkę w danej rubryce za pomocą makra, muszę wyświetlić informację że jest to np n-ty wiersz.

help :)
z góry dziękuję
Ostatnio edytowano Pn lis 18, 2019 11:28 am przez Jermor, łącznie edytowano 1 raz
Powód: Wątek przeniesiony z działu Calc do Makra i programowanie
Libre Office 6.2.0.3
Windows 7
qsc
 
Posty: 3
Dołączył(a): Pt lis 15, 2019 10:20 am

Re: Szukaj pustej komórki

Postprzez Jan_J » Pn lis 18, 2019 2:57 pm

Stwierdzenie
znaleźć pierwszą pustą komórkę w danej rubryce
jest słabo zrozumiałe: `komórka` i `rubryka` to moim zdaniem to samo; prawdopodobnie chodzi Ci o znalezienie komórki w kolumnie (patrz niżej) albo w wierszu (potrzebna drobna modyfikacja poniższej analizy).

Typ zawartości komórki jest opisany za pomocą jej pola Type, przyjmującego wg dokumentacji https://www.openoffice.org/api/docs/com ... tType.html następujące wartości:
EMPTY cell is empty.
VALUE cell contains a constant value.
TEXT cell contains text.
FORMULA cell contains a formula.
W praktyce wartości tych stałych są następujące: EMPTY = 0, VALUE = 1, TEXT = 2, FORMULA = 3. Lepiej jest odwoływać się do nazw symbolicznych, bo kod staje się czytelniejszy i jednocześnie odporny na ew. przyszłe zmiany w specyfikacji.

Dostać się do tego pola można dwojako:
* albo przez jego nazwę: obiekt_komórki.Type
* albo przez funkcję pobierającą jego wartość: obiekt_komórki.getType()
Patrz dokumentacja API, np. https://www.openoffice.org/api/docs/com ... XCell.html


Szkic / pseudokod:

nr_wiersza = numer pierwszego sprawdzanego wiersza;
while (komórka w k-tej kolumnie w nr_wiersza-tym wierszu nie jest pusta) {
zwiększ nr_wiersza o 1;
}
przekaż nr_wiersza jako wynik;

Przykładowa realizacja (w Basicu; nie obudowana w funkcji/makro, bo zakładam, że wiesz, jak to zrobić):
Kod: Zaznacz cały   Rozszerz widokZwiń widok
pusty = com.sun.star.table.CellContentType.EMPTY
ark = ThisComponent.Sheets.getByIndex(0)
k = 0
w = 0
while ark.getCellByPosition(k, w).getType() <> pusty
  w = w+1
wend
ark.getCellByPosition(1, 0).setValue(w)

Warto pomyśleć o rozsądnej parametryzacji przekazywania danych (niekoniecznie bieżący skoroszyt; niekoniecznie bieżący arkusz; niekoniecznie pierwsza kolumna; niekoniecznie od pierwszego wiersza) i odbioru wartości wynikowej (niekoniecznie wpisywana do komórki -- a jeśli nawet, to niekoniecznie do B1 w tym samym arkuszu).
JJ
LO 6.2 ∙ AOO 4.1.7 ∙ Python (3.8|2.7) ∙ Unicode 12 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 4001
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław


Powrót do Makra i programowanie

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość