[SOLVED] Porównanie całych wierszy z dwóch plików.

Użytkowanie arkusza kalkulacyjnego
gnusny
Posty: 5
Rejestracja: ndz paź 13, 2019 9:54 pm

[SOLVED] Porównanie całych wierszy z dwóch plików.

Post autor: gnusny »

Dzień dobry
Przyszedł czas, że na żądanie jednego z urzędów muszę porównać dwa duże pliki.
Zawierają one dane adresowe.
W wierszach są: gmina, powiat, miasto, ulica, nr domu.
Chciałbym porównać te dokumenty w taki sposób że zaznaczyło by powtarzające się całe wiersze.
Próbowałem już porównywać całe dokumenty ale nie spełniło to moich oczekiwań, tu jest potrzebne zaznaczenie powtarzających się całych wierszy.

Dzięki za ewentualne podpowiedzi i pozdrawiam.
Ostatnio zmieniony pn maja 10, 2021 11:16 am przez gnusny, łącznie zmieniany 1 raz.
LibreOffice 7.0.5 na Windows 10
Awatar użytkownika
Jermor
Posty: 2254
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Porównanie całych wierszy z dwóch plików.

Post autor: Jermor »

To wcale nie jest łatwy problem. I nie dlatego, że jest jakoś skomplikowany algorytmicznie. Problemem jest zgodność pól w blikach A i B. Np. jeśli nazwa gminy to "Miastków Kościelny" i tak została wpisana do pliku A, natomiast do pliku B została wpisana z podwójną spacją między tymi wyrazami, albo dodatkową spacją na końcu, to nie są to już takie same wpisy. Inny przykład: numer domu w jednym miejscu wpisano jako "15 A" w innym "15A". To są już różne wpisy. To samo dotyczy ulic. Dla człowieka ulica "A. Mickiewicza" i "Mickiewicza" to takie same adresy, dla komputera już nie.
Teraz o twoim zagadnieniu. Rozumiem, że masz dwa pliki arkuszowe Calca, plik A i plik B. Zaznaczenie wierszy mających swój odpowiednik w pliku przeciwnym polega na czym? Na zmianie koloru tła takiego wiersza? Na wpisaniu specjalnego symbolu obok takiego wiersza? Utworzeniu nowego arkusza zawierającego tylko te wiersze, które znajdują się w obu plikach?
Podaj także informację o tym, co rozumiesz przez określenie "dużego pliku"? 1000 wierszy? 20000 wierszy 150000 wierszy?
Jedną z możliwości uzyskania wyniku jest odfiltrowanie rekordów z wykorzystaniem filtra zaawansowanego. Wydaje się to najprostszym rozwiązaniem, jednak w programie Calc Apache OpenOffice (taki masz podpisany w stopce) istnieje ograniczenie liczby pozycji umieszczanych w obszarze kryteriów. W programie Calc LibreOffice liczba wierszy w obszarze kryteriów może być bardzo duża. Przetestowałem wariant mający nawet 1000 wierszy. Oznaczałoby to, że np. dane zawarte w pliku B mogłyby być obszarem kryteriów do wyboru rekordów z pliku A.
O filtrowaniu zaawansowanym możesz poczytać tu: https://yestok.pl/lbo/y59.php#59043
Gdy filtrowanie nie może zostać wykonane, trzeba skorzystać z formuł. Jednak w tym celu należy utworzyć w każdym pliku, dla każdego wiersza unikatowy identyfikator. Tutaj byłoby to połączenie wszystkich pól z wiersza, czyli wykorzystanie funkcji ZŁĄCZ.TEKSTY().
W dodatkowej kolumnie można wykorzystać funkcję: PODAJ.POZYCJĘ(), która wyszukuje identyfikator wygenerowany w pliku A z listą identyfikatorów wygenerowanych w pliku B. Wynik liczbowy mówi o tym, że jest zgodność identyfikatorów, zaś wynik #N/D, że takiego identyfikatora nie znaleziono.
AOO 4.1.15, LO 7.5.9 (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.
gnusny
Posty: 5
Rejestracja: ndz paź 13, 2019 9:54 pm

Re: Porównanie całych wierszy z dwóch plików.

Post autor: gnusny »

Jermor dzięki za zaangażowanie.
No więc tak,
Używam Libreoffice Wersja: 5.4.4.2
Mam dwa pliki Calca A i B (jak trzeba mogę je scalić do jednego)
Zaznaczenie wierszy mających swój odpowiednik w pliku przeciwnym polegało by na zaznaczeniu ich kolorem.
Duży plik - u mnie to jest 9144 wierszy.

Pozdrawiam
LibreOffice 7.0.5 na Windows 10
Awatar użytkownika
Jermor
Posty: 2254
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Porównanie całych wierszy z dwóch plików.

Post autor: Jermor »

Przykład rozwiązań przesyłam.
Arkusz A zawiera formatowanie warunkowe, wykorzystujące wygenerowane identyfikatory pomocnicze.
Arkusz "Odfiltrowane" zawiera tylko te rekordy z arkusza A, które mają odpowiednik w arkuszu B. Tutaj wykorzystałem filtr zaawansowany.

No i przejdź na wersję 7.0.5
Załączniki
gnusny.ods
(12.23 KiB) Pobrany 143 razy
AOO 4.1.15, LO 7.5.9 (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.
gnusny
Posty: 5
Rejestracja: ndz paź 13, 2019 9:54 pm

Re: Porównanie całych wierszy z dwóch plików.

Post autor: gnusny »

Jermor jesteś WIELKI !!!!

Przeszedłem na v. 7.0.5
Sposób z formatowaniem warunkowym jest to to, o co mi chodziło.
Próbuję to wdrożyć w moich plikach i jakoś nic mi nie zaznacza.
Wygenerowałem identyfikatory pomocnicze.
W arkuszu A mam zakres B1:J9144
W arkuszu B zakres B1:J4764
Czy mógłbyś opisać zastosowaną przez Ciebie składnię?
Chyba niespecjalnie dobrze ją zmieniłem: NIE(CZY.BŁĄD(PODAJ.POZYCJĘ($A1;$B.$A$1:$A$4764;0)))

???
Załączniki
moje formatowanie warunkowe
moje formatowanie warunkowe
LibreOffice 7.0.5 na Windows 10
Awatar użytkownika
Jermor
Posty: 2254
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Porównanie całych wierszy z dwóch plików.

Post autor: Jermor »

Formuła warunkowa w moim przykładzie zakłada, że identyfikatory w arkuszu porównywane są z identyfikatorami w arkuszu o nazwie "B".
Identyfikatory powstały w każdym arkuszu za pomocą połączenia wszystkich pól tworzących wiersz danych.
Stąd zastrzeżenie w moim pierwszym poście, że zawartość każdego pola w wierszu musi być identyczna z odpowiadającymi polami w jakimś wierszu w drugim arkuszu.
Ponieważ przeszedłeś na LIbreOffice (nie zmieniłeś opisu w stopce) masz do dyspozycji inną, wygodniejszą, funkcję: JEŻELI.BŁĄD() i to ona zostanie użyta w formatowaniu warunkowym.
W pierwszym arkuszu zaznacz cały obszar B2:J9144 (założyłem, że w pierwszym wierszu są nazwy kolumn)
Wywołaj formatowanie warunkowe a w nim w polu "Warunek 1" opcję "Formuła jest" i wpisz następującą formułę (znak "=" pomijasz):

Kod: Zaznacz cały

JEŻELI.BŁĄD(PODAJ.POZYCJĘ($A2;$nazwa_drugiego_arkusza.$A$2:$A$4764;0);0)
Wybierz styl do zastosowania i zatwierdź.
AOO 4.1.15, LO 7.5.9 (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.
gnusny
Posty: 5
Rejestracja: ndz paź 13, 2019 9:54 pm

Re: Porównanie całych wierszy z dwóch plików.

Post autor: gnusny »

Jermor, dziękuję bardzo.
Dzięki Tobie udało mi się skończyć pliki kontrolne na czas.
Super że można tu liczyć na pomoc.
LibreOffice 7.0.5 na Windows 10
ODPOWIEDZ