Specyficzne rozszerzenie zaznaczenia komórek

Użytkowanie arkusza kalkulacyjnego
Petrich
Posty: 3
Rejestracja: ndz cze 24, 2018 7:56 pm

Specyficzne rozszerzenie zaznaczenia komórek

Post autor: Petrich »

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
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Specyficzne rozszerzenie zaznaczenia komórek

Post autor: Jan_J »

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 (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Petrich
Posty: 3
Rejestracja: ndz cze 24, 2018 7:56 pm

Re: Specyficzne rozszerzenie zaznaczenia komórek

Post autor: Petrich »

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
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Specyficzne rozszerzenie zaznaczenia komórek

Post autor: belstar »

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

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
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Specyficzne rozszerzenie zaznaczenia komórek

Post autor: Jan_J »

// 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

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 (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Petrich
Posty: 3
Rejestracja: ndz cze 24, 2018 7:56 pm

Re: Specyficzne rozszerzenie zaznaczenia komórek

Post autor: Petrich »

Szaleństwo! DZIAŁA! MEGA DZIĘKUJĘ! Odlot skróciło mi to pracę o 90% ! :)
OpenOffice 4.1.2 na Windows7
ODPOWIEDZ