Autouzupełnianie
Autouzupełnianie
Witam.
Potrzebuje stworzyć w pracy arkusz, w którym wpisuje kody pocztowe i ulice. Rzecz polega na tym, że robiłbym to 3 razy szybciej gdybym potrafił zrobić 2 funkcje. A mianowicie:
1. Automatyczne uzupełnianie miasta w kolumnie D na podstawie kodu wpisanego w kolumnie B, przy czym chodzi tak na prawdę o 4 kombinacje, bo tyle miast mnie interesuje.
2. Autouzupełnianie danych z innego arkusza. Tzn. mam arkusz ze spisem wszystkich ulic w miastach, które mnie interesują i chciałbym ten arkusz zrobić źródłem danych dla autouzupełniania, żebym nie musiał za każdym razem wpisywać pełnej nazwy ulicy. Rzecz polega na tym, że jest bardzo mało powtórzeń i wpisywanie jest upierdliwe:) Nie wiem, czy można z zupełnie innego pliku te dane wczytać, ale może chociaż z drugiego arkusza w tym samym pliku?
Z góry dziękuję za pomoc i mam nadzieje zaoszczędzenie olbrzymich ilości czasu w mojej pracy.
Pozdrawiam, Piotr
Potrzebuje stworzyć w pracy arkusz, w którym wpisuje kody pocztowe i ulice. Rzecz polega na tym, że robiłbym to 3 razy szybciej gdybym potrafił zrobić 2 funkcje. A mianowicie:
1. Automatyczne uzupełnianie miasta w kolumnie D na podstawie kodu wpisanego w kolumnie B, przy czym chodzi tak na prawdę o 4 kombinacje, bo tyle miast mnie interesuje.
2. Autouzupełnianie danych z innego arkusza. Tzn. mam arkusz ze spisem wszystkich ulic w miastach, które mnie interesują i chciałbym ten arkusz zrobić źródłem danych dla autouzupełniania, żebym nie musiał za każdym razem wpisywać pełnej nazwy ulicy. Rzecz polega na tym, że jest bardzo mało powtórzeń i wpisywanie jest upierdliwe:) Nie wiem, czy można z zupełnie innego pliku te dane wczytać, ale może chociaż z drugiego arkusza w tym samym pliku?
Z góry dziękuję za pomoc i mam nadzieje zaoszczędzenie olbrzymich ilości czasu w mojej pracy.
Pozdrawiam, Piotr
OpenOffice 3.3 na Windows XP w pracy i OpenOffice 3.3 na Windows 7 64 w domu
Re: Autouzupełnianie
Przyda się tutaj znajomość funkcji: licz.jeżeli, indeks, podaj.pozycję.
Generalnie możesz się zapoznać z załącznikiem do tego postu -> http://user.services.openoffice.org/pl/ ... 1417#p5840 arkusz Stan. Ewentualnie -> http://user.services.openoffice.org/pl/ ... =646#p2723
Jakbyś wrzucił przykładowy arkusz kalkulacyjny, to bym mógł opracować rozwiązanie. Nie orientuję się w kodach pocztowych ulic/miast.
Generalnie możesz się zapoznać z załącznikiem do tego postu -> http://user.services.openoffice.org/pl/ ... 1417#p5840 arkusz Stan. Ewentualnie -> http://user.services.openoffice.org/pl/ ... =646#p2723
Jakbyś wrzucił przykładowy arkusz kalkulacyjny, to bym mógł opracować rozwiązanie. Nie orientuję się w kodach pocztowych ulic/miast.
LibreOffice 5.1.6 (64bit)
Kubuntu 16.04 (64bit)
Wszelkie uwagi lub chęć udziału przy polonizacji LibreOffice proszę kierować na adres: pol_lo at pro.wp.pl
Kubuntu 16.04 (64bit)
Wszelkie uwagi lub chęć udziału przy polonizacji LibreOffice proszę kierować na adres: pol_lo at pro.wp.pl
Re: Autouzupełnianie
Dzięki za pomoc! Myślę, że najsensowniej byłoby po prostu umieścić pełną listę ulic powyżej listy, którą ja uzupełniam. Na skróty to jest, ale da się.
I najlepiej byłoby, gdyby wpisując ulicę w dolnej liście automatycznie uzupełniałby mi kod i miasto na podstawie listy górnej. Rzecz jest upierdliwa, bo ja muszę tylko uzupełniać powód ręcznie, reszta byłaby automatyczna:) Przy czym teraz już mówimy o kilku tysiącach ulic...
I najlepiej byłoby, gdyby wpisując ulicę w dolnej liście automatycznie uzupełniałby mi kod i miasto na podstawie listy górnej. Rzecz jest upierdliwa, bo ja muszę tylko uzupełniać powód ręcznie, reszta byłaby automatyczna:) Przy czym teraz już mówimy o kilku tysiącach ulic...
- Załączniki
-
- Ulice.ods
- (7.96 KiB) Pobrany 289 razy
OpenOffice 3.3 na Windows XP w pracy i OpenOffice 3.3 na Windows 7 64 w domu
Re: Autouzupełnianie
Szukanie kodu po nazwie ulicy:
Szukanie miasta po nazwie ulicy:
W załączniku plik demonstracyjny.
Kod: Zaznacz cały
=JEŻELI(CZY.BRAK(PODAJ.POZYCJĘ($B19; $B$11:$B$14;0));"";INDEKS(A$11:A$14;PODAJ.POZYCJĘ($B19; $B$11:$B$14;0)))
Kod: Zaznacz cały
=JEŻELI(CZY.BRAK(PODAJ.POZYCJĘ($B19; $B$11:$B$14;0));"";INDEKS(C$11:C$14;PODAJ.POZYCJĘ($B19; $B$11:$B$14;0)))
- Załączniki
-
- Ulice.ods
- (9.5 KiB) Pobrany 343 razy
LibreOffice 5.1.6 (64bit)
Kubuntu 16.04 (64bit)
Wszelkie uwagi lub chęć udziału przy polonizacji LibreOffice proszę kierować na adres: pol_lo at pro.wp.pl
Kubuntu 16.04 (64bit)
Wszelkie uwagi lub chęć udziału przy polonizacji LibreOffice proszę kierować na adres: pol_lo at pro.wp.pl
Re: Autouzupełnianie
A może coś takiego:
1.Wpisujemy kod miasta
2. Lista wyboru ulicy
1.Wpisujemy kod miasta
2. Lista wyboru ulicy
- Załączniki
-
- Ulice.ods
- (33.33 KiB) Pobrany 336 razy
OpenOffice.org 4.1.3 , Windows 10
Re: Autouzupełnianie
Witam
Dołączony przykład mojego przedmówcy ma jedną poważną wadę, lista poprawności danych jest długa (bardzo).
Czy masz możliwość podzielenia ulic na kolumny wg miast, stworzyło by to możliwość ograniczenia listy do ulic tylko z wybranego miasta? Jeśli tak, przykład masz tutaj: http://user.services.openoffice.org/en/ ... php?id=333
Nie wiem jak jest u ciebie, ale u mnie przy tej ilości danych (2211 wierszy), auto-uzupełnienie nie działa tak jak bym sobie tego życzył. Jeśli też masz podobnie, czy istnieje możliwość wykorzystania do tego celu makropoleceń?. Mam pewne pomysły jak to rozwiązać (nie sprawdzone), ale mogę popróbować.
Na koniec małe pytanko: Czy to są kody pocztowe?
Pozdrawiam
Dołączony przykład mojego przedmówcy ma jedną poważną wadę, lista poprawności danych jest długa (bardzo).
Czy masz możliwość podzielenia ulic na kolumny wg miast, stworzyło by to możliwość ograniczenia listy do ulic tylko z wybranego miasta? Jeśli tak, przykład masz tutaj: http://user.services.openoffice.org/en/ ... php?id=333
Myślę, że najsensowniej byłoby po prostu umieścić pełną listę ulic powyżej listy, którą ja uzupełniam. Na skróty to jest, ale da się.
Nie wiem jak jest u ciebie, ale u mnie przy tej ilości danych (2211 wierszy), auto-uzupełnienie nie działa tak jak bym sobie tego życzył. Jeśli też masz podobnie, czy istnieje możliwość wykorzystania do tego celu makropoleceń?. Mam pewne pomysły jak to rozwiązać (nie sprawdzone), ale mogę popróbować.
Na koniec małe pytanko: Czy to są kody pocztowe?

Pozdrawiam
LibreOffice 5.1.2.2 Ubuntu 16 LTS
Re: Autouzupełnianie
Tak, to są kody:) Ale niepoprawne:) Autouzupełnianie rozwiązałem rozwijaną listą spod Ctrl+D, trochę wolniejsze, ale i tak mnóstwo czasu zaoszczędzam:) Skorzystałem z rozwiązania kolegi Raknora. Dzięki wielkie wszystkim za pomoc.
Jak masz jakieś pomysły to możesz podrzucić, pokombinujemy razem.belstar pisze:Mam pewne pomysły jak to rozwiązać (nie sprawdzone), ale mogę popróbować.
OpenOffice 3.3 na Windows XP w pracy i OpenOffice 3.3 na Windows 7 64 w domu
Re: Autouzupełnianie
Witam
Przedstawiam listę kroków do realizacji:
1. Podzielić bazę na odpowiednie mniejsze części:
Wczytanie mniejszej porcji danych do tablicy i poszukiwanie wzorca w niej jest o wiele szybsze niż operowanie na wszystkich danych. Ta część jest wykonywana sporadycznie (np. po wstawieniu nowego wpisu do bazy ulic i jest już zrealizowana.
2. Wpisanie do tablicy danych wg wzorca pobranego z komórki ( twój wpis w kolumnie B z nazwami ulicy, wzorzec to pierwsza litera twojego wpisu). Po tym wpisie jesteśmy wstanie zlokalizować miejsce gdzie znajdują się dane.
W tym momencie można by było tak stworzoną tablice wstawić tak jak zasugerowałeś w jednym ze swoich postów.
Jeśli plik, który mam od ciebie zawiera wszystkie ulice to największa porcja danych oscyluje w okolicy 290 elementów (Litera S, Ś). Można by pomyśleć nad jeszcze wydajnym rozwiązaniem z punktu pierwszego np. wydzielenie wpisów zaczynających się tak zwanymi polskimi literami do jednej kolumny (Ś = 42 wpisy)
3. Stworzenie drugiej pustej tablicy bez określenia liczby elementów, w którą będą wstawiane dane najbardziej pasujące do wzorca. Inicjację tablicy postanowiłem zacząć od momentu kiedy wzorzec będzie miał długość dwóch znaków (np. wpisałeś „sk”), pozwoli to ograniczyć listę i tym samym przyspieszyć działanie programu.
4. Wyświetlić dane w jakiejś formatce, by ułatwić użytkownikowi wybór. Oczywiście lista będzie ograniczana z długością wzorca. Wszystko ma się odbywać w locie i bez użycia myszy, żeby użytkownik nie tracił czasu na latanie po ekranie.
W moim rozwiązaniu zastosowany jest tzw. naiwny algorytm przeszukiwania tablic, można by zastosować inny np. algorytm Boyera-Moore'a, ale (przyznaje się bez bicia) mam trudności w implementacji go w Basic-u (może ktoś podsunie rozwiązanie).
Oczekuje twojej opinii i sugestii co do mojego rozwiązania
Pozdrawiam
Ps. Jeśli plik, który posiadam jest z niepełną listą ulic, proszę wrzuć całą listę.
Przedstawiam listę kroków do realizacji:
1. Podzielić bazę na odpowiednie mniejsze części:
Wczytanie mniejszej porcji danych do tablicy i poszukiwanie wzorca w niej jest o wiele szybsze niż operowanie na wszystkich danych. Ta część jest wykonywana sporadycznie (np. po wstawieniu nowego wpisu do bazy ulic i jest już zrealizowana.
2. Wpisanie do tablicy danych wg wzorca pobranego z komórki ( twój wpis w kolumnie B z nazwami ulicy, wzorzec to pierwsza litera twojego wpisu). Po tym wpisie jesteśmy wstanie zlokalizować miejsce gdzie znajdują się dane.
W tym momencie można by było tak stworzoną tablice wstawić tak jak zasugerowałeś w jednym ze swoich postów.
Jeśli plik, który mam od ciebie zawiera wszystkie ulice to największa porcja danych oscyluje w okolicy 290 elementów (Litera S, Ś). Można by pomyśleć nad jeszcze wydajnym rozwiązaniem z punktu pierwszego np. wydzielenie wpisów zaczynających się tak zwanymi polskimi literami do jednej kolumny (Ś = 42 wpisy)
3. Stworzenie drugiej pustej tablicy bez określenia liczby elementów, w którą będą wstawiane dane najbardziej pasujące do wzorca. Inicjację tablicy postanowiłem zacząć od momentu kiedy wzorzec będzie miał długość dwóch znaków (np. wpisałeś „sk”), pozwoli to ograniczyć listę i tym samym przyspieszyć działanie programu.
4. Wyświetlić dane w jakiejś formatce, by ułatwić użytkownikowi wybór. Oczywiście lista będzie ograniczana z długością wzorca. Wszystko ma się odbywać w locie i bez użycia myszy, żeby użytkownik nie tracił czasu na latanie po ekranie.
W moim rozwiązaniu zastosowany jest tzw. naiwny algorytm przeszukiwania tablic, można by zastosować inny np. algorytm Boyera-Moore'a, ale (przyznaje się bez bicia) mam trudności w implementacji go w Basic-u (może ktoś podsunie rozwiązanie).
Oczekuje twojej opinii i sugestii co do mojego rozwiązania
Pozdrawiam
Ps. Jeśli plik, który posiadam jest z niepełną listą ulic, proszę wrzuć całą listę.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
Re: Autouzupełnianie i makra
Witam
Mam zaszczyt przedstawić wstępną, działającą wersje rozwiązania problemu. Proszę testujcie i przedstawcie swoje uwagi i sugestie, postaram się je rozwiązywać w miarę wolnego czasu. Na pewno trzeba kod zoptymalizować. Algorytm wyszukujący jest nie zaimplementowany, stwierdziłem że przy szybkości mojego komputera jest on zbędny. Jeśli jednak komuś byłby potrzebny, podaje kroki potrzebne do jego stworzenia.
Wszystkie dane muszą być posortowane rosnąco.
1. Przerobić procedurę „Wykonaj”, żeby zaczynała działać od wpisania dwóch liter (wzorzec).
2. Po wypełnieniu tablicy (w kodzie „Lista2()” ) obliczyć ilość wpisów.
3. Przejść do środkowego elementu tablicy (temp = Ubound(Lista2() / 2) „uwaga wynik zaokrąglić do całości') i sprawdzić jaki jest wpis (temp2 = Lista2(temp)).
4. Instrukcją warunkową porównać dwie pierwsze litery wpisu ze wzorcem.
A. Jest mniejszy - szukane dane są w pierwszej części tablicy, wypełniamy nową tablicę danymi z tablicy Lista2 od indeksu 0 do indeksu = temp.
B. Jest równy - bingo.
C. Jest większy - szukane dane są w drugiej części tablicy, wypełniamy nową tablicę danymi z tablicy Lista2 od indeksu temp do indeksu = Ubound(Lista2).
5. Mając już połowę danych, możemy powtarzać działania od punktu trzeciego aż do uzyskania wyniku lub wczytać tablicę do kontrolki (w kodzie „KombiZnajdz”).
Jest kilka kwiatków nad którymi trzeba popracować np. po zatwierdzeniu klawiszem Enter wybranego wpisu z listy, wpisywany on jest do zaznaczonej komórki, w tym momencie powinna ona zrobić się wybrana a niezaznaczona (kolor czerwony). Instrukcja:
coś nie działa.
Opis działania:
Z chwilą otwarcia dokumentu uruchamiane jest makro do nasłuchu zdarzeń klawiatury, wszystko co się później dzieje jest oparte na procedurze wywołanej z chwilą naciśnięcia jakiegoś klawisza. Gdy makro stwierdzi że są spełnione wszystkie warunki, odkrywa pole kombi z wczytaną listą ulic. Wpisując kolejne znaki szukanej ulicy podświetlenie jest przesuwane do najbardziej pasującego wpisu do wzorca (typowe dla pola kombi). Zatwierdzając dany wybór klawiszem enter pole jest zamykane (ukrywane) a wybrana pozycja jest wpisana do aktywnej komórki.
Instrukcja użytkowania:
Przed zaczęciem użytkowania należy stworzyć bazę danych (w dołączonym przykładzie jest to zrobione). W tym celu albo usuń arkusz z bazą ulic („BazaUlic”) lub usuń wszystkie dane z tego arkusza. W arkuszu „Ulice” w kolumnie „A” są wszystkie dane z których będzie stworzona baza, po ewentualnej aktualizacji tych danych trzeba je posortować rosnąco (bardzo ważne). Uruchomić makro przyciskiem znajdującym się w arkuszu i czekać aż pojawi się komunikat „Zrobione”. Teraz jesteśmy gotowi działać. Przejdź do arkusza lista, umieść kursor w kolumnie „B” wpisz jakąś literę a później już jak wspominałem wcześniej. Może się zdarzyć że pod jakąś literą jest brak danych np. „Q” wtedy wyświetlany jest odpowiedni komunikat. W celu zamknięcia (ukrycia) pola kombi naciśnij klawisz „Esc”
To chyba wszystko.
Pozdrawiam
Mam zaszczyt przedstawić wstępną, działającą wersje rozwiązania problemu. Proszę testujcie i przedstawcie swoje uwagi i sugestie, postaram się je rozwiązywać w miarę wolnego czasu. Na pewno trzeba kod zoptymalizować. Algorytm wyszukujący jest nie zaimplementowany, stwierdziłem że przy szybkości mojego komputera jest on zbędny. Jeśli jednak komuś byłby potrzebny, podaje kroki potrzebne do jego stworzenia.
Wszystkie dane muszą być posortowane rosnąco.
1. Przerobić procedurę „Wykonaj”, żeby zaczynała działać od wpisania dwóch liter (wzorzec).
2. Po wypełnieniu tablicy (w kodzie „Lista2()” ) obliczyć ilość wpisów.
3. Przejść do środkowego elementu tablicy (temp = Ubound(Lista2() / 2) „uwaga wynik zaokrąglić do całości') i sprawdzić jaki jest wpis (temp2 = Lista2(temp)).
4. Instrukcją warunkową porównać dwie pierwsze litery wpisu ze wzorcem.
A. Jest mniejszy - szukane dane są w pierwszej części tablicy, wypełniamy nową tablicę danymi z tablicy Lista2 od indeksu 0 do indeksu = temp.
B. Jest równy - bingo.
C. Jest większy - szukane dane są w drugiej części tablicy, wypełniamy nową tablicę danymi z tablicy Lista2 od indeksu temp do indeksu = Ubound(Lista2).
5. Mając już połowę danych, możemy powtarzać działania od punktu trzeciego aż do uzyskania wyniku lub wczytać tablicę do kontrolki (w kodzie „KombiZnajdz”).
Jest kilka kwiatków nad którymi trzeba popracować np. po zatwierdzeniu klawiszem Enter wybranego wpisu z listy, wpisywany on jest do zaznaczonej komórki, w tym momencie powinna ona zrobić się wybrana a niezaznaczona (kolor czerwony). Instrukcja:
Kod: Zaznacz cały
Doc.getCurrentController().select(Null)
Opis działania:
Z chwilą otwarcia dokumentu uruchamiane jest makro do nasłuchu zdarzeń klawiatury, wszystko co się później dzieje jest oparte na procedurze wywołanej z chwilą naciśnięcia jakiegoś klawisza. Gdy makro stwierdzi że są spełnione wszystkie warunki, odkrywa pole kombi z wczytaną listą ulic. Wpisując kolejne znaki szukanej ulicy podświetlenie jest przesuwane do najbardziej pasującego wpisu do wzorca (typowe dla pola kombi). Zatwierdzając dany wybór klawiszem enter pole jest zamykane (ukrywane) a wybrana pozycja jest wpisana do aktywnej komórki.
Instrukcja użytkowania:
Przed zaczęciem użytkowania należy stworzyć bazę danych (w dołączonym przykładzie jest to zrobione). W tym celu albo usuń arkusz z bazą ulic („BazaUlic”) lub usuń wszystkie dane z tego arkusza. W arkuszu „Ulice” w kolumnie „A” są wszystkie dane z których będzie stworzona baza, po ewentualnej aktualizacji tych danych trzeba je posortować rosnąco (bardzo ważne). Uruchomić makro przyciskiem znajdującym się w arkuszu i czekać aż pojawi się komunikat „Zrobione”. Teraz jesteśmy gotowi działać. Przejdź do arkusza lista, umieść kursor w kolumnie „B” wpisz jakąś literę a później już jak wspominałem wcześniej. Może się zdarzyć że pod jakąś literą jest brak danych np. „Q” wtedy wyświetlany jest odpowiedni komunikat. W celu zamknięcia (ukrycia) pola kombi naciśnij klawisz „Esc”
To chyba wszystko.
Pozdrawiam
- Załączniki
-
- Ulice(1)a.ods
- (57.6 KiB) Pobrany 390 razy
LibreOffice 5.1.2.2 Ubuntu 16 LTS
Re: Autouzupełnianie-algorytm aneks
Witam ponownie.
Przepraszam ale w części na przepis algorytmu wyszukującego, popełniłem błąd, pisałem bez dogłębnego przemyślenia działania algorytmu, więc jutro po pracy postaram się wyjaśnić gdzie leży pies pogrzebany. Sama idea jest dobra, tylko przekazanie złe.
Pozdrawiam
Przepraszam ale w części na przepis algorytmu wyszukującego, popełniłem błąd, pisałem bez dogłębnego przemyślenia działania algorytmu, więc jutro po pracy postaram się wyjaśnić gdzie leży pies pogrzebany. Sama idea jest dobra, tylko przekazanie złe.
Pozdrawiam
LibreOffice 5.1.2.2 Ubuntu 16 LTS