Specyficzne rozszerzenie zaznaczenia komórek

Użytkowanie arkusza kalkulacyjnego

Specyficzne rozszerzenie zaznaczenia komórek

Postprzez Petrich » N cze 24, 2018 8:17 pm

Dzień Dobry,
Poprzez panel do wyszukiwania zaznaczam komórki posiadające dany znak. W moim przypadku jest to prefix "BRW" no. BRW0203, BRW11320. Poprzez opcję wyszukaj wszędzie lub wszystkie (?) wynajduje mi je w całym arkuszu i jest ok.
Problem polega na tym, że nie jestem w stanie znaleźć możliwości rozszerzenia tego zaznaczenia o kolejne dwie komórki. Można zrobić to przy pomocy shift strzałka ale nie wtedy kiedy chce się owe rozszerzenie zaimplikować we wszystkich zaznaczeniach które są oddzielone między sobą tzn. rozrzucone po całym arkuszu. Oczywiście chodzi mi o skrót klawiaturowy. Ewentualnie może ktoś mógłby mi pomóc czy istnieje na coś takiego jakaś formuła w duchu znajdź wszystkie komórki z BRW i rozszerz o dwie kolumny w lewo. :) W załączniku grafika ewentualnie gdybym nie był zbyt konkretny w tym pyatniu
Załączniki
pytanie na forum.png
OpenOffice 4.1.2 na Windows7
Petrich
 
Posty: 3
Dołączył(a): N cze 24, 2018 7:56 pm

Re: Specyficzne rozszerzenie zaznaczenia komórek

Postprzez Jan_J » N cze 24, 2018 11:43 pm

Powiedz jeszcze co zamierzasz robić z tym zaznaczeniem?
Jeśli już pisać funkcję, to może się okazać, że oznaczenie bloku jest półśrodkiem do dalszej ręcznej pracy, która zazwyczaj przebiega schematycznie, a którą funkcja mogłaby wykonać po cichu. Nie zawsze tak jest, więc warto spytać o okoliczności.
JJ
LO (6.0|6.1) ∙ AOO 4.1.5 ∙ Python (3.7|2.7) ∙ Unicode 11 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3719
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Specyficzne rozszerzenie zaznaczenia komórek

Postprzez Petrich » Pn cze 25, 2018 9:31 am

Dziękuję za zainteresowanie. Drugim etapem jest skopiowanie i przeklejenie do innej kolumny w innym arkuszu. Tam już wtedy dane muszą być "ciurkiem" podane. Bez przerw ( interwałów ) jak podczas zaznaczenia. Ale to akurat. Robi się naturalnie.
Pozdrowienia
OpenOffice 4.1.2 na Windows7
Petrich
 
Posty: 3
Dołączył(a): N cze 24, 2018 7:56 pm

Re: Specyficzne rozszerzenie zaznaczenia komórek

Postprzez belstar » Wt cze 26, 2018 9:49 pm

Mam dla ciebie makro. Wklej sobie do modułu StarBasica, stwórz jakiś skrót i będziesz miał tak jak chcesz.
Kod: Zaznacz cały   Rozszerz widokZwiń widok
Sub RangesSelect
   oMulti = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
   oCurrentSelection = ThisComponent.getCurrentSelection()
     oActiveSheet = ThisComponent.CurrentController.getActiveSheet()
     oCurC = ThisComponent.getCurrentController()
   sAbsoluteName = oActiveSheet.AbsoluteName
   sName = oActiveSheet.getName()
   If oCurrentSelection.supportsService("com.sun.star.sheet.SheetCell") then
      Print "Zaznaczonna jedna komórka, użyj Shifta + strzałki w lewo"
      Exit Sub
   End If
      
   If oCurrentSelection.supportsService("com.sun.star.sheet.SheetCellRange") then
      Print "Zaznaczonna jednen zakres, użyj Shifta + strzałki w lewo"
      Exit Sub
   End If
   
   If oCurrentSelection.supportsService("com.sun.star.sheet.SheetCellRanges") then
      oElementNames = oCurrentSelection.getElementNames()
      For i = 0 to Ubound(oElementNames)
         Mid(oElementNames(i), 1, len(sName) + 2,"B"
         oSelRange = oActiveSheet().getCellRangeByName(oElementNames(i))
         addr = oSelRange.getRangeAddress()
           oMulti.addRangeAddress(addr, False)
        Next i
        oCurC.select(oMulti)      
   End If      
End Sub

Makro działać będzie tylko na zaznaczeniach wielokrotnych w innych przypadkach poinformuje cię o tym i zakończy działanie.
Pozdrawiam
LibreOffice 5.1.2.2 Ubuntu 16 LTS
belstar
 
Posty: 637
Dołączył(a): Cz mar 17, 2011 9:08 am

Re: Specyficzne rozszerzenie zaznaczenia komórek

Postprzez Jan_J » Wt cze 26, 2018 10:17 pm

// Ups; belstar był szybszy...

Obiekt zaznaczenia, jak każdy obiekt zakresu danych w Basicu ma właściwości tylko do odczytu, co sprawia, że jego naiwne rozszerzanie nie daje efektu. Zapewne najprościej jest skonstruować nowy obiekt na bazie istniejącego i dodać go do zaznaczenia. Mniej więcej na tej zasadzie działa rozwiązanie belstara.

Zamiast tego napisałem proste bezparametrowe makro, które
* pyta w okienku o frazę do wyszukiwania,
* znajduje wystąpienia tej frazy w kol-tej kolumnie bieżącego arkusza, począwszy od wiersza wiersz_pocz,
* w przypadku dopasowania/znalezienia zaznacza w odpowiednim wierszu fragment od kol_pocz do kol_konc włącznie,
* przechodzi do następnego wiersza i robi to samo; kończy pracę kiedy w kol-tej kolumnie bieżącego wiersza nie ma wpisu.
Pamiętać trzeba, że wewnętrzna numeracja wierszy/kolumn zaczyna się od zera.
Kod: Zaznacz cały   Rozszerz widokZwiń widok
sub zaznacz_pasujace()
    rem numeracja wierszy/kolumn zaczyna się od zera
    kol_pocz = 1
    kol_konc = 4
    kol = 2                ' w tej kolumnie poszukujemy frazy
    wiersz_pocz = 1 ' od tego wiersza zaczynamy poszukiwania
    fraza = inputbox("wpisz frazę:")
    dok = ThisComponent
    kontroler = dok.currentController
    ark = kontroler.ActiveSheet
    zazn = dok.createInstance("com.sun.star.sheet.SheetCellRanges")
    wiersz = wiersz_pocz
    tekst = ark.getCellByPosition(kol, wiersz).getString()
    do while (tekst <> "")
        if (instr(tekst, fraza) > 0) then
            obszar = ark.getCellRangeByPosition(kol_pocz, wiersz, kol_konc, wiersz)
            zazn.addRangeAddress(obszar.getRangeAddress(),True)
        end if
        wiersz = wiersz+1
        tekst = ark.getCellByPosition(kol, wiersz).getString()
    loop
    kontroler.select(zazn)
end sub

Co z tym zrobić?
Narzędzia / Makra / Zarządzaj / Basic / utwórz moduł w skoroszycie albo w konfiguracji prywatnej Calca, tam wklej kod
następnie zamknij edytor kodu i użyj Narzędzia / Makra / Uruchom: odszukaj nawigatorem nazwę zaznacz_pasujace i odpal.
Makro da się przypisać do przycisku albo skrótu klawiszowego, będzie wygodniej.
Zmiana sposobu konfigurowania (wprowadzanie frazy, adresy kolumn, doprecyzowanie pojęcia wyszukania -- na początku tekstu, wg wzorca regularnego itp.) jest do pomyślenia; automatyzacja kopiowania takoż.

Licencja: freeware, z prawem dowolnej rozbudowy i dowolnego wykorzystania, ale bez gwarancji.
JJ
LO (6.0|6.1) ∙ AOO 4.1.5 ∙ Python (3.7|2.7) ∙ Unicode 11 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3719
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Specyficzne rozszerzenie zaznaczenia komórek

Postprzez Petrich » Wt cze 26, 2018 10:27 pm

Szaleństwo! DZIAŁA! MEGA DZIĘKUJĘ! Odlot skróciło mi to pracę o 90% ! :)
OpenOffice 4.1.2 na Windows7
Petrich
 
Posty: 3
Dołączył(a): N cze 24, 2018 7:56 pm


Powrót do Calc

Kto przegląda forum

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