Ukrywanie wierszy

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

Ukrywanie wierszy

Postprzez Dawidxyz » Pt gru 08, 2017 12:45 pm

Witam

Potrzebuję makra, które jeżeli Komórka H18 będzie pusta to ukryje wiersz 26.
Jeżeli H19 pusta ukryje wiersz 27
Jeżeli H20 pusta ukryje wiersz 28
Jeżeli H21 pusta ukryje wiersz 29

Jest to dla mnie bardzo ważne.
Dziękuję za wszelką pomoc.
OpenOffice 4.1.2
Dawidxyz
 
Posty: 8
Dołączył(a): Śr wrz 14, 2016 12:25 am

Re: Ukrywanie wierszy

Postprzez antekg » Pt gru 08, 2017 5:15 pm

Kod: Zaznacz cały   Rozszerz widokZwiń widok
Sheet = ThisComponent.Sheets(0)
Rows = Sheet.GetRows
if Sheet.getCellRangeByName("H18").Type = com.sun.star.table.CellContentType.EMPTY then Rows.GetByIndex(25).IsVisible=False 
if Sheet.getCellRangeByName("H19").Type = com.sun.star.table.CellContentType.EMPTY then Rows.GetByIndex(26).IsVisible=False
if Sheet.getCellRangeByName("H20").Type = com.sun.star.table.CellContentType.EMPTY then Rows.GetByIndex(27).IsVisible=False
if Sheet.getCellRangeByName("H21").Type = com.sun.star.table.CellContentType.EMPTY then Rows.GetByIndex(28).IsVisible=False
AOO 4.1.4 (Polish) na Windows 10 (64b) / AOO 4.1.0 na Windows Vista / LibreOffice na Mageia Linux
Avatar użytkownika
antekg
 
Posty: 15
Dołączył(a): Śr sie 25, 2010 6:18 pm
Lokalizacja: Warszawa

Re: Ukrywanie wierszy

Postprzez Jan_J » Pt gru 08, 2017 5:40 pm

Kilka uwag stylistycznych:
* zamiast ręcznego powielania instrukcji, można zastosować powtórzenie automatyczne, tym bardziej że sąsiadujące (w pionie) komórki sterują ukrywaniem przylegających wierszy;
* iteracja będzie łatwiejsza, kiedy zamiast tekstowych adresów użyjemy numerów wierszy i kolumn.
Kod: Zaznacz cały   Rozszerz widokZwiń widok
Sheet = ThisComponent.Sheets(0)
Rows = Sheet.GetRows()
number_of_rows = 4
first_processed_row = 24
first_cell_row = 17 ' wiersz 18
cell_column = 7 ' kolumna H
for i = 0 to number_of_rows-1
  if Sheet.getCellByPosition(cell_column, first_cell_row+i).Type = com.sun.star.table.CellContentType.EMPTY then Rows.GetByIndex(first_processed_row+i).IsVisible=False
next i

Tym sposobem raz ukryte wiersze pozostaną ukryte. Zapełnienie sterującej komórki i wywołanie powyższego kodu ich nie odkryje. Jeśli tak ma być, to OK.
* gdyby jednak nie chodziło o samo ukrywanie, tylko raczej o uzależnienie statusu od “pustości” komórki, zrezygnowałbym z nadmiarowej konstrukcji
if warunek then wynik = false else wynik = true
na rzecz podstawienia
wynik = not warunek
co doprowadziłoby instrukcję wewnątrz pętli do postaci
Kod: Zaznacz cały   Rozszerz widokZwiń widok
Rows.GetByIndex(first_processed_row+i).IsVisible = (Sheet.getCellByPosition(cell_column, first_cell_row+i).Type <> com.sun.star.table.CellContentType.EMPTY)
JJ
LO 5.4 ∙ AOO 4.1.4 ∙ Python (3.6|2.7) ∙ Unicode 10 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3625
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Ukrywanie wierszy

Postprzez Dawidxyz » Cz gru 14, 2017 12:15 pm

Bardzo dziękuję za pomoc!
OpenOffice 4.1.2
Dawidxyz
 
Posty: 8
Dołączył(a): Śr wrz 14, 2016 12:25 am


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ść