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
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).