Sortowanie listy

Użytkowanie arkusza kalkulacyjnego
puter
Posty: 20
Rejestracja: pn mar 27, 2023 7:32 pm

Sortowanie listy

Post autor: puter »

Witam, czy może ktoś zerknąć na plik w załączniku i powiedzieć czy da się znajdującą tam listę sortować z pominięciem pól pustych i tak żeby nie rozjechała się tabela po prawej stronie.

Lista jest właściwie kopią tabeli ale chciałbym aby układała się od najwcześniejszej daty do najpóźniejszej. Nie wiem czy w ten sposób jest to w ogóle wykonalne dlatego pytam??
Ostatnio zmieniony czw kwie 27, 2023 10:06 pm przez puter, łącznie zmieniany 1 raz.
LibreOffice 6.2.8.2 na Windows 11
Jan_J
Posty: 4579
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Sortowanie listy

Post autor: Jan_J »

Calc nie umie sortować komórek z formułami wg wartości ich wyników.
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
puter
Posty: 20
Rejestracja: pn mar 27, 2023 7:32 pm

Re: Sortowanie listy

Post autor: puter »

Jan_J pisze: śr kwie 26, 2023 3:08 pm Calc nie umie sortować komórek z formułami wg wartości ich wyników.
Hmm ale jeśli zrobię to samo tylko w innym arkuszu to jednak sortowanie działa. Z tym, że sortuje również te puste pola a chciałbym żeby były pominięte. Niby ta lista mogłaby być w oddzielnym arkuszu, nie mniej jednak bardzo ułatwiło by mi to pracę jeśli nie musiał bym się przełączać między arkuszami i miał to na jednym ekranie.

Przykład z osobnym arkuszem w załączeniu.
Załączniki
plik.ods
(23.29 KiB) Pobrany 80 razy
LibreOffice 6.2.8.2 na Windows 11
Jan_J
Posty: 4579
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Sortowanie listy

Post autor: Jan_J »

Tak jak u Ciebie, tylko prostszy przykład
probka.ods
(7 KiB) Pobrany 61 razy
Sortowanie kolumny formuł E w arkuszu 1 nie robi zupełnie *nic*.
Takie samo(?) sortowanie kolumny formuł A w arkuszu 2 porządkuje wartości.

Jak to wyjaśnić? być może ma to związek z (niejawnym) przyjęciem, że w jednym przypadku sortuje się „zwykły” zakres, a w drugim — zakres bazy danych?

W dokumentacji użytkownika (https://help.libreoffice.org/latest/pl/ ... PAR=SHARED) nie widzę wyjaśnienia.
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
puter
Posty: 20
Rejestracja: pn mar 27, 2023 7:32 pm

Re: Sortowanie listy

Post autor: puter »

Jan_J pisze: śr kwie 26, 2023 7:01 pm A tu
probka.ods
sortowanie kolumny formuł nie robi zupełnie *nic*
Zgadza się masz rację, nie sortuje formuł jeśli jest odniesienie jest do tego samego arkusza. Jednak jeśli wstawimy formułę która odnosi do innego arkusza to sortowanie już ładnie działa. Niestety dla mnie jest to tylko częściowe rozwiązanie które w pełni mnie nie zadawala. No chyba, że inaczej po prostu się nie da.
LibreOffice 6.2.8.2 na Windows 11
puter
Posty: 20
Rejestracja: pn mar 27, 2023 7:32 pm

Re: Sortowanie listy

Post autor: puter »

Czyli mam rozumieć, że po prostu nie da się tego w żaden sposób zrobić tak aby było to widoczne w jednym arkuszu?? Jedyna opcja to przenieść dane za pomocą formuły do innego arkusza i tam mogę sobie wtedy sortować.
LibreOffice 6.2.8.2 na Windows 11
Jan_J
Posty: 4579
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Sortowanie listy

Post autor: Jan_J »

Nie wiem czy „w żaden sposób”. W ogóle sortowanie bloku opisanego przez formuły wydaje mi się dziwne, bo może prowadzić do nierozwiązywalnych sytuacji. Ale to co pokazałeś, wygląda na naiwną niedoróbę. Nie Twoją oczywiście.
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
puter
Posty: 20
Rejestracja: pn mar 27, 2023 7:32 pm

Re: Sortowanie listy

Post autor: puter »

Hehe co masz na myśli pisząc "naiwną niedoróbę" :) Wiem, że rozwiązanie na pewno nie jest idealne i pewnie ktoś kto bardziej ogarnia calc zrobił by to lepiej. Jeśli jednak coś działa (w tym przypadku w innym arkuszu) to chyba nie jest takie bezsensowne, chociaż jak już pisałem też mnie to do końca nie zadawala. Masz jakiś inny pomysł jak to zrobić lepiej??

Ewentualnie czy mimo tego "niedorobionego" rozwiązania jest możliwość jakiegoś auto odświeżania autofiltra?? Jak wpiszę coś w tabeli właściwej to czy za każdym razem muszę robić ponownie filtrowanie żeby wyświetlić interesujące mnie dane w kolejności rosnącej?? Czy może da się to zrobić jakimś skrótem lub automatycznie??
LibreOffice 6.2.8.2 na Windows 11
Awatar użytkownika
Jermor
Posty: 2352
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Sortowanie listy

Post autor: Jermor »

Wtrącę swoje trzy grosze, może z innej beczki.
Myślę, że do tego problemu należałoby podejść od innej strony, i taką wersję przedstawię.
Podstawą byłaby jednak lista osób, przebywających w obiekcie z przypisanymi salami, pryczami i terminami.
Ta lista może być wprowadzana w dowolnym porządku, może też być dowolnie sortowana.
Założyłem, że wszystkie sale są 4-osobowe i jest ich pewna skończona ilość. W załączonym przykładzie przyjąłem, że jest 35 sal, czyli 140 osób.
Dane te rejestrowane są w arkuszu "Lista" i zawierają dodatkowe (ukryte) kolumny, w których tworzone są robocze dane. Wyznaczany jest w nim najbliższy dzień a przy pozycji odpowiadającej takiemu dniu, umieszczana jest nazwa stylu, z jakim ten dzień ma zostać wyświetlony. Arkusz ten jest chroniony, bez hasła, a ochrona jest włączona tylko po to, aby nie nadpisać tych pomocniczych kolumn. W tym arkuszu działa jedno formatowanie warunkowe, sygnalizujące próbę przypisania tego samego miejsca do więcej niż jednej osoby.
Na podstawie tego zestawienia dynamicznie zmienia się arkusz "Sale" zawiera on tylko wykaz sal i miejsc w tych salach, wskazując graficznie miejsca zajęte. Realizuje to formatowanie warunkowe.
Trzeci arkusz "Przejściówki_B" także powstaje na podstawie arkusza listy. Odpowiednie formuły przenoszą dane do pozycji. Przenoszenie tych danych odbywa się przy pomocy funkcji WYSZUKAJ.PIONOWO() (nieco rozbudowanej) więc dla miejsc nieobsadzonych generowana jest wartość błędu. Aby ukryć takie wyniki, wykorzystałem formatowanie warunkowe. Na potrzeby zaznaczenia daty najbliższej w stosunku do dnia dzisiejszego utworzyłem dodatkowy styl ("Termin") i jest on wykorzystany podczas przenoszenia danych do arkusza "Przejściówki_B" w funkcji STYL().
Podsumowując: Wypełnia się tylko arkusz "Lista" pozostałe arkusze zmieniają się automatycznie.
Załączniki
puter plik.ods
(27.14 KiB) Pobrany 64 razy
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Jan_J
Posty: 4579
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Sortowanie listy

Post autor: Jan_J »

Czyli odwrócenie funkcjonowania systemu wdrażanego przez @puter. Tylko trzeba by się wyzbyć poczucia, że modyfikacje winny być dokonywane poprzez małe formatki; w istocie są to raporty z wynikami pewnych zapytań do „listy”.

@puter
pisząc „niedoróba” nie miałem na myśli Twoich prób. Tu każdy sobie radzi jak może, a w szczególności ludzie będący profesjonalistami „gdzieś poza IT”. Każda poważne próba ulepszenia swojego środowiska pracy zasługuje na uwagę.
Myślałem o niedorobionej funkcjonalności Calca, która pozwala na przeprowadzenie słabo zdefiniowanej operacji pod warunkiem spełnienia sztucznych i (prawdopodobnie) nieudokumentowanych założeń.
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
puter
Posty: 20
Rejestracja: pn mar 27, 2023 7:32 pm

Re: Sortowanie listy

Post autor: puter »

@Jermor to co zaproponowałeś faktycznie mogło by zdać egzamin i może nawet było by lepsze jak to co ja chciałem osiągnąć. Jednak muszę troszkę to rozbudować o pozostałe pola. O ile zrozumiałem zasadę działania tego pliku to formuły tam zastosowane troszkę mnie przerastają. Czy mógłbyś przynajmniej dla jednego wiersza, pomieszczenia dostosować to tak aby wszystkie pola z listy tj. Osoba, klasyfikacja, pali/nie pali, termin i uwagi przenosiły się w odpowiednie miejsca w arkuszu Przejściówki.

Z góry dzięki.

@Jan_J sory mogłem źle to odebrać, ale w każdym razie nie obrażam się :) i przyjmuje każdą konstruktywną krytykę :) Dopiero się uczy i serio jestem pełen podziwu dla waszych umiejętności :D
Ostatnio zmieniony czw kwie 27, 2023 10:07 pm przez puter, łącznie zmieniany 1 raz.
LibreOffice 6.2.8.2 na Windows 11
Awatar użytkownika
Jermor
Posty: 2352
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Sortowanie listy

Post autor: Jermor »

Skoro uznałeś, że pomysł jest coś wart, przedstawiam ci nieco zmodyfikowany wariant.
Najpierw jednak wyjaśnienie.
Projekt składa się z czterech arkuszy. Podstawowym arkuszem jest arkusz "Lista". Zawiera on zestawienie osób przebywających w obiekcie. Każda osoba przybywa z: nazwiskiem, terminem i informacjami Klasyfikacja, pali/niepali oraz uwagami. Po wpisaniu każda z nich otrzymuje numer sali i nr łóżka. Połączenie tych elementów tworzy unikatowy identyfikator przypisany do osoby.
Dostępne miejsca prezentowane są w arkuszu "Sale". Standardowo obszar miejsc jest zaznaczony jako wolny. Formatowanie warunkowe sprawdza, czy dla układu sala+nr łóżka występuje pozycja w arkuszu "Lista". Jeśli taka pozycja występuje, miejsce jest zaznaczane jako zajęte.
Zestawienie osób stanowi tablicę o nazwie "obiekt". Tablicę wypełnia się tylko potrzebnymi pozycjami wpisując je w dowolnym porządku. Ilość wierszy w tablicy zależy od łącznej liczby łóżek. Tablica składa się z dwóch części. Pierwsza jest przeznaczona na wpisywanie danych podstawowych. Wszystkie komórki tej części mają status komórek niechronionych. Druga część niedostępna dla użytkownika zawiera pomocnicze wyniki. Komórki tej części mają status komórek chronionych. Między obiema częściami wstawiona jest pusta kolumna, po to, aby w przypadku sortowania danych w części pierwszej, procedura sortowania na zaznaczała zakresu należącego do części drugiej. Dzięki temu arkusz może mieć włączoną ochronę (nie można sortować danych w arkuszu chronionym jeżeli w obszarze sortowania występują komórki chronione).
Działania pomocnicze to:
obliczenie ile razy każdy układ sala+nr łóżka pojawił się w zestawieniu. Służy to wykrywaniu sytuacji przypisania tego samego miejsca po raz drugi.
Obliczenie ile dni pozostaje u każdej osoby od dnia dzisiejszego do terminu ją obowiązującego.
Tu wprowadziłem pewną innowację, z której nie musisz korzystać.
Tak jak u ciebie znajduję osoby, których data jest najbliższa dacie bieżącej
Dodatkowo znajduję także osoby, które do daty bieżącej mają nie więcej niż ileś dni. Tę liczbę dni możesz ustawić jako parametr w ostatnim arkuszu skoroszytu "Parametry".
Wykrywam także osoby "przeterminowane", czyli takie, które ciągle są na stanie pomimo upłynięcia terminu. Wiem, że takie sytuacje nie powinny się zdarzyć, ale życie pokazuje nie jedne zadziwiające przypadki. Dlatego takie coś też jest.
Na podstawie tych danych, każda osoba ma przypisany styl formatowania daty "termin".
Formatowanie warunkowe sprawdza najpierw, czy osoba nie jest "przeterminowana", potem czy jest najbliżej daty bieżącej a końcu, czy do jej terminy jest nie więcej niż ileś dni.
Arkusz "Przejściówki_B" zawiera moduły mieszkalne zbudowane w jednolity sposób. Dwuwierszowy nagłówek i kolejne wiersze odpowiadające numerowi łóżka. Podstawowym elementem do obliczenia jest odpowiedź na którym miejscu w zestawieniu tablicy "obiekt" znajduje się konkretne miejsce do spania. Formułę, która to oblicza umieściłem za wierszem modułu. Otrzymana wartość jest więc numerem wiersza w tablicy "obiekt". A jeśli tak, to poszczególne elementy wiersza w module wyznaczy funkcja INDEKS(). Jeżeli pozycji wierszowej z modułu nie ma w tablicy "obiekt" zwracana jest wartość #N/D i w związku z tym wszystkie obliczenia odwołujące się do takiej pozycji także zwracają #N/D. Formatowanie warunkowe zastosowane w tym arkuszu, ma wszystkim komórkom zawierającym wynik #N/D przypisać styl "Pusta", co w efekcie końcowym nie pokazuje tego błędnego wyniku. Styl stosuje białe czcionki na białym tle. Skopiowany wiersz z jednego modułu można powielać w dowolnym innym. i nie zależy to od liczby wierszy w module mieszkalnym.
Arkusz "Parametry" zawiera pewne ustawienia pozwalające na zarządzanie całością.
Można podać ilość dni poprzedzających termin końcowy. Terminy mieszczące się w tych dniach będą wyróżnione odrębnym stylem ("terminb").
Data testowa. Można tu podać datę przyszłą (przeszłą także), aby sprawdzić, jak będzie wyglądała sytuacja w tym innym dniu. Brak wpisu implikuje stosowanie daty bieżącej.
Style to zestawienie nazw zastosowanych stylów.
Tutaj są wpisane nazwy stylów do wyświetlenia terminów w modułach mieszkalnych. Utworzyłem 4 style o nazwach:
termin — do przedstawienia daty będącej najbliżej daty bieżącej, lub testowej. Jeśli wystąpiłaby data "przeterminowana", to ta data się nie pojawi.
terminp — do przedstawienia daty "przeterminowanej", gdyby jednak się zdarzyła.
terminb — do przedstawienia dat, które są odległe o nie więcej niż dni poprzedzające.
terminn — do przedstawienia pozostałych dat, niepasujących do warunków.
----
Formułą, którą omówię jest ta wyznaczająca pozycję wiersza modułu mieszkalnego w tablicy "obiekt" (komórka I6). Wygląda ona następująco:
=PODAJ.POZYCJĘ(PRZESUNIĘCIE(A5;-A6;0)&A6;INDEKS(obiekt;;1)&INDEKS(obiekt;;2);0)
a częścią intrygującą jest zapewne funkcja PRZESUNIĘCIE(). Ta funkcja działa podobnie do ADR.POŚR() podaje zawartość komórki innej niż wymieniona w pierwszym argumencie. W tym przykładzie przytoczyłem formułę dla pierwszego wiersza pierwszego modułu. Bierze ona pod uwagę komórkę A5, a następnie przesuwa się w górę o tyle wierszy ile jest wpisane w komórce A6 (znak minus oznacza przesuwanie się w górę) i robi to w tej samej kolumnie, w której jest komórka A5 (wartość 0, trzeciego argumentu). Czyli tak naprawdę pobiera zawartość A4, czyli numer pomieszczenia (120) i dołącza do tego zawartość komórki A6, co tworzy zbitkę 1201. Taki ciąg jest wyszukiwany w wektorze połączonych elementów pierwszej i drugiej kolumny tabeli "obiekt" i jeśli zostanie znaleziony zwraca pozycję, na której się znajduje, a jeśli nie wystąpi zwraca wartość błędu #N/D. Tę formułę można kopiować w dół, bo co prawda pierwszym argumentem stanie się wówczas A6, ale A7 zawiera liczbę o 1 większą niż A6, więc znowu trafi do komórki zawierającej numer pomieszczenia.
Załączniki
puter_J.ods
(33.68 KiB) Pobrany 68 razy
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
ODPOWIEDZ