Liczba wyrażona słownie.

Uwaga: przeglądasz tę stronę na urządzeniu o niewielkim ekranie (szerokość < 640px). Niektóre zamieszczone w artykule ilustracje i animacje mogą stać się nieczytelne po dopasowaniu ich do rozdzielczości tego ekranu.

Yestok.pl

Jerzy Moruś

© Wszystkie prawa zastrzeżone. Wykorzystanie całości serwisu lub jego fragmentów bez pisemnej zgody autora zabronione.

Zamiana wartości liczbowej na wartość słownie w Calcu.



Opracowanie powstało w oparciu o wersję programu istniejącą w trakcie jego pisania, Libre Office: 3.4.5, Apache OpenOffice: 3.3.0.


[10.08.2023] Poniższe opracowanie dotyczy obecnie oprogramowania Apache OpenOffice i wszystkich wersji LibreOffice niższych niż 7.5. Oczywiście może być stosowane nadal w najnowszych wersjach LibreOffice, ale wprowadzone do pakietu rozwiązania podważają sens korzystania z opisanego rozwiązania. O tym jak funkcjonuje to od wersji 7.5 można przeczytać tutaj: Liczba przedstawiana słowami..

Jedną z niedogodności arkuszy kalkulacyjnych, w tym także Calca, jest brak funkcji pozwalającej przekształcić wartość liczbową na wartość podaną słownie. Choć nie można powiedzieć, jest funkcja BAHTEXT() zamieniająca wartość liczbową na słowną, tyle że w języku tajskim. Przekształcenie na postać słowną przydaje się najczęściej przy finalizowaniu faktury wystawianej z pomocą programu arkusza kalkulacyjnego. Może jednak przydać się także w innych okolicznościach.

Rozwiązania są dwa. Można wprowadzić do swojego skoroszytu taki algorytm, który dokona odpowiednich przekształceń, czyli zadziała na zasadzie: jeśli w komórce A1 arkusza znajdzie się wartość liczbowa, to w komórce A2 pojawi się tekst tę wartość reprezentujący. Drugim rozwiązaniem jest dołączenie do dokumentu własnej funkcji, która zwróci wartość liczby, będącej argumentem tej funkcji, w postaci słownej. Funkcja powinna zadziałać jak wspomniana na wstępie funkcja BAHTEXT() tylko po polsku.

Oba przypadki nie są jednak tak proste. W obu, fleksyjność języka polskiego, powoduje konieczność stworzenia dość złożonego algorytmu i nie wszyscy użytkownicy programu Calc mogą sobie z tym poradzić. W drugim – dodatkowo – trzeba znać jeden z dopuszczalnych języków programowania, w którym ten algorytm zostanie zakodowany. Taki zakodowany algorytm nazywany jest makrem. Makra wchodzą w skład modułu, moduły zaś w skład bibliotek. Moduły mogą mieć charakter lokalny, są wówczas częścią dokumentu, albo globalny i można je wykorzystywać w obrębie wszystkich tworzonych na danym komputerze dokumentów.

Rozwijając w tym miejscu na moment temat wykorzystania drugiego ze sposobów, dodam że istnieje także możliwość włączenia do pakietu (x)Office dedykowanego rozszerzenia. Rozszerzenia to programy pisane przez społeczność użytkowników (x)Office, pozwalające zwiększać funkcjonalność pakietu. Jednym z takich rozszerzeń jest rozszerzenie Numbertext, dodające do programu Calc dwie dodatkowe funkcje zamieniające wartość wyrażoną cyframi na wartość zapisaną słowami. Więcej o tym napisałem w opracowaniu „Rozszerzenia pakietu (x)Office”.

W roku 2023 pojawiło się trzecie rozwiązanie, które dostępne jest tylko w pakiecie LibreOffice. Autor wspomnianego powyżej rozszerzenia Numbertext zmodyfikował pakiet LibreOffice w ten sposób, że umożliwia on teraz sformatowanie wyniku liczbowego do postaci słownej. O tym rozwiązaniu traktuje opracowanie, które można przeczytać tutaj: Liczba przedstawiana słowami.

Wobec możliwości wynikających z wykorzystania rozszerzenia Numbertext w pakietach Apache OpenOffice oraz wykorzystania nowego sposobu formatowania w LibreOffice (dostępnego od wersji 7.5), dalsza część tego artykułu ma raczej charakter historyczny, chociaż przedstawione rozwiązanie może być przydatne, gdy swój projekt chcemy rozpropagować wśród wielu użytkowników i nie wymagamy przy tym aby instalowali oni jakieś dodatkowe oprogramowanie lub korzystali z konkretnej wersji pakietu biurowego.

Niniejszy artykuł opisuje jak wykorzystać napisany przeze mnie algorytm, zawarty w oddzielnym dokumencie Calca zapisanym jako szablon. Jest to zatem rozwiązanie pierwszego typu.

[Dodane 29.06.2024] Opracowałem nową wersję algorytmu pozwalającego na prezentowanie liczby w postaci słownej. Zasada funkcjonowania tej wersji jest taka sama jak omówiona poniżej w opracowaniu z 2012 roku. Czyli nadal jest to arkusz, który może zostać zapisany jako szablon lub dołączony do istniejącego skoroszytu. Różnica polega na tym, że można równocześnie uzyskać wynik dla większej ilości liczb, bo aż do ośmiu. Ponadto można określić miana dla liczb, co pozwoli uzyskać efekt w postaci np. dwa złote i piętnaście groszy. Szczegółowy opis znajduje się pod omówieniem pierwotnej wersji tego algorytmu, nadal dostępnego do pobrania. Do opisu nowej wersji można przejść od razu z tego miejsca.

Wersja z roku 2012.

Dedykowanym rozszerzeniem nazwy pliku szablonu są litery odt. Odpowiedni plik nazywa się więc SLOWNIE.ODT. Plik przygotowany do pobrania z serwisu, jest w postaci zwykłego dokumentu programu Calc (a więc z rozszerzeniem ods) i to użytkownik powinien zapisać go w postaci szablonu. Jak to zrobić, opiszę za chwilę. Zainteresowani mogą pobrać wspomniany plik poprzez odpowiednie łącze znajdujące się w dalszej części tego opracowania.

Ideą szablonów jest możliwość utworzenia nowego dokumentu na bazie wybranego wzorca. Otwarcie zatem dokumentu opartego o szablon, oznacza przejęcie wszystkich rozwiązań zastosowanych w szablonie z jednoczesnym traktowaniem dokumentu jako całkowicie nowego. Takiego, jakby użytkownik sam go opracował do tego etapu a teraz kontynuując pracę, może rozbudowywać, zmieniać i dopasowywać projekt do własnych potrzeb.

Przygotowany przeze mnie dokument zawiera tylko jeden arkusz nazwany: ArkuszSłownie. W tym arkuszu w komórce A1 należy umieścić wartość liczbową. Wynik, czyli wartość z komórki A1 zapisana słowami, pojawi się w komórce A10 tego arkusza. Ze względów bezpieczeństwa, w obawie przed przypadkowym naruszeniem integralności algorytmu, arkusz został zabezpieczony hasłem i użytkownik ma dostęp tylko do komórki A1.

Jeden ze sposobów wykorzystanie szablonu polega na otwarciu nowego dokumentu w oparciu o ten szablon a następnie rozbudowywanie projektu, drugi – pozwala dołączyć, do własnego funkcjonującego skoroszytu, zawartość szablonu i wykorzystać jego możliwości.

Aby ten mechanizm wykorzystać trzeba najpierw przekształcić pobrany plik w szablon. Pobieramy plik dokumentu do dostępnej lokalizacji, np. „Moje Dokumenty”. Dwukrotne kliknięcie w pobrany plik spowoduje otwarcie go w programie Calc. Teraz można go zapisać jako szablon programu. Aby to zrobić rozwijamy listę polecenia „Plik” i następnie w rozwiniętej liście kaskadowej polecenia „Szablony”, wybieramy działanie „Zapisz...”. Sekwencję tę pokazuje rys. 1.

Zapisywanie dokumentu Calca jako szablon.
Rys. 1: Ścieżka dojścia do polecenia zapisu szablonu.

Otwarte okno dialogowe Szablony pokazane poniżej, pozwoli przypisać szablon do konkretnej kategorii i określić jego nazwę.

Nazywanie i lokowanie szablonu.
Rys. 2: Okno nadawania nazwy i lokowania szablonu.

Wybieramy kategorię „Domyślnie” i określamy nazwę dla zapisywanego szablonu. W okienku podglądu „Szablony” widoczne są nazwy szablonów już zapisanych dla tej kategorii. Podaje się tylko pierwszą część nazwy bez rozszerzenia odt. Po wpisaniu nazwy uaktywnia się przycisk OK, który kończy operację zapisywania. Od tego też momentu można korzystać w projektach z zapisanego szablonu.

Aby rozpocząć pracę z nowym dokumentem opartym o szablon, wywołujemy program Calc i rozwijamy zawartość ikonki „Nowy”. Należy rozwinąć a nie kliknąć ikonkę, gdyż w przeciwnym razie otworzy ona rzeczywiście nowy dokument ale bez możliwości wskazania szablonu. Na rys. 3. Widać rozwiniętą listę możliwości tej ikonki.

Rozwinięta lista ikonki Nowy.
Rys. 3: Rozwinięta lista ikonki Nowy.

Taka sama lista pojawi się także po rozwinięciu polecenia „Plik” i wskazaniu na tej liście polecenia „Nowy” (widać je na pierwszej pozycji na rys. 1.). Niezależnie od metody dotarcia do listy, wybrać należy ostatnią pozycję, czyli „Szablony i dokumenty”.

Okno szablony i dokumenty, wybór kategorii.
Rys. 4: Okno wyboru rodzaju otwieranego dokumentu.

Otwarte okno pozwala wybrać rodzaj otwieranego dokumentu. W tym wypadku wskazanie grupy Szablony spowodowało wyświetlenie listy kategorii należących do tej grupy. Dwukrotne kliknięcie w kategorię „Domyślny”, zmieni zawartość wyświetlanego okna na listę szablonów znajdujących się w tej kategorii. Nazwa kategorii znalazła się w ramce tego okienka. Pokazuje to rys. 5.

Wybór konkretnego szablonu.
Rys. 5: Wybór konkretnego szablonu z listy.

Po wybraniu szablonu i kliknięciu przycisku „Otwórz”, powstanie nowy dokument o tymczasowej nazwie „Bez tytułun”, który może stać się bazą do dalszego rozwijania projektu. Rys. 6. pokazuje taki utworzony dokument.

Dokument Bez tytułu 2 powstały na bazie szablonu słownie.
Rys. 6: Dokument Bez tytułu 2 powstały na bazie szablonu słownie.

Arkusz ArkuszSłownie jak wspomniałem udostępnia jedynie komórkę A1. Do niej więc należy wprowadzić adres innej komórki, zawierającej wartość liczbową. W tym celu trzeba jednak dodać przynajmniej jeden pusty arkusz. Kliknięcie widocznego w dolnej części okna zielonego znaku plus doda nowy arkusz po ostatnim w kolekcji. Jeśli chcemy dodać nowy (nowe) arkusze w wybranym miejscu, trzeba na nazwie wybranego arkusza kliknąć prawym przyciskiem myszki. Uzyskamy menu kontekstowe jak na rys. 7.

Menu kontekstowe zakładki nazwy arkusza.
Rys. 7: Menu kontekstowe zakładki nazwy arkusza.

Wybór „Wstaw...” pozwala wstawić nowy arkusz. Warto jednak zwrócić uwagę na występujące tu polecenie „Przenieś/kopiuj...”, które pozwoli w przyszłości ustalać kolejność arkuszy w dokumencie. Wstawianie nowego arkusza jest bardziej rozbudowane, dlatego powoduje otwarcie dodatkowego okna pozwalającego sprecyzować opcje wstawiania. Opcje te widoczne są na rysunku poniżej.

Opcje wstawiania arkusza.
Rys. 8: Opcje wstawiania arkusza.

Jak widać wybrać można miejsce wstawiania oraz liczbę arkuszy, a przy wstawianiu tylko jednego arkusza można też podać jego nazwę. Po dodaniu nowego arkusza wystarczy zbudować odpowiednie formuły. Jedną – przekazującą wartość do arkusza ArkuszSłownie i drugą – przejmującą wynik a umieszczoną w arkuszu Arkusz2. Przykładowe formuły zilustrowałem poniżej.

Układ przykładowych formuł w arkuszach.
Rys. 9: Przykładowe formuły umieszczone w arkuszach.

Po prawej stronie ilustracji widać formułę wpisaną do komórki A1, dzięki temu arkusz otrzymuje wartość do przekształcenia. Po lewej stronie, w arkuszu Arkusz2, w komórce A8, wstawiono formułę przejmującą wynik znajdujący się w komórce A10 arkusza ArkuszSłownie.

Jeśli użytkownik ma już funkcjonujący dokument programu Calc, w którym chciałby dodać możliwość przekształcenia pewnych wartości na postać słowną, może dołączyć do swego dokumentu arkusz z szablonu słownie. W prezentowanym już oknie dialogowym wstawiania arkusza, pokazanym na rysunku 8. widoczna jest, także możliwa do zaznaczenia, opcja „Z pliku”. Zaznaczenie tej opcji odblokuje przycisk „Przeglądaj...”, dzięki któremu możemy wskazać konkretny plik do wstawienia. Jeśli plik zostanie wybrany, w okienku podglądu pliku wyświetlone zostaną wszystkie dostępne arkusze w nim się znajdujące. Użytkownik może zaznaczyć wybrane arkusze i przyciskiem OK wszystkie je dodać do swojego dokumentu.

Pojawia się więc pytanie gdzie znajduje się szablon słownie.odt? Niestety położenie szablonów jest umiejscowione dość głęboko w strukturze plików a na dodatek struktura ta może nie być pokazywana. Standardowe ustawienia systemu Windows ustalają bowiem dla niektórych folderów i plików status „ukryty” czyli nie prezentowany użytkownikowi. Jeśli więc chcemy skorzystać z przywołania pliku, powinniśmy utworzyć pusty dokument na bazie szablonu – tak jak to omówiłem powyżej – zapisać go pod własną nazwą w folderze ogólnie dostępnym, np. „Moje dokumenty” i z tego dopiero folderu wskazać plik do wstawienia.

Dla ciekawych - szablony znajdują się w folderach:

W powyższym zapisie xOffice oznacza tekst „LibreOffice” albo „OpenOffice.org” zależnie od używanego pakietu (od wersji 4 już tylko OpenOfficec). Folder oznaczony liczbą 3 przytoczoną w tych przykładowych ścieżkach dostępu odpowiada w rzeczywistości głównemu numerowi wersji pakietu oprogramowania. Zatem użytkownicy korzystający z wersji czwartej muszą sięgnąć do folderu oznaczonego liczbą 4.

Jeśli użytkownik chce przekształcić w tym samym dokumencie dodatkowo inną wartość liczbową, musi w tym celu dołączyć ponownie arkusz szablonu. Każda nowa kopia arkusza ArkuszSłownie zostanie opatrzona dodatkowym deskryptorem liczbowym. Więc druga kopia będzie miała nazwę ArkuszSłownie_2 i taką nazwą należy się wówczas posługiwać w tworzonych formułach.

Przygotowany przeze mnie arkusz przekształca na postać słowną tylko liczby nieujemne, i po zaokrągleniu nie większe niż 999 999 999 999,99 co pozwoli wystawić fakturę na około 500 stadionów narodowych. Liczba jest zawsze najpierw zaokrąglana do dwóch miejsc po przecinku i dopiero potem przekształcana. Jeśli wartość liczbowa nie spełnia tego warunku lub przekazano zawartość komórki nie zawierającej liczby, wynikiem jest tekst „Liczba jest ujemna, albo za duża, albo nie jest to liczba!”.

Na zakończenie jeszcze uwaga związana z budową formuły powrotnej. Zabezpieczenie szablonu przed zmianami powoduje, że nie można podczas tworzenia formuły metodą wskazywania, kliknąć myszką komórkę A10 arkusza ArkuszSłownie i w ten sposób umieścić ją w formule. Adres ten trzeba wpisać samodzielnie. Nazwę arkusza, czyli ArkuszSłownie można wpisywać dowolnymi literami. Jeśli jednak chcesz użyć myszki, to wskaż komórkę A1 bo ta jest dostępna, a następnie dopisz po jedynce cyfrę zero w utworzonym w formule odwołaniu do adresu.

Możliwość pobrania tej wersji arkusza konwersji znajduje się pod opisem nowej wersji.


Nowa wersja arkusza konwersji.

Nowy skoroszyt zapisany jest pod nazwą „LiczbaNaTekst.ods. Przy okazji tych prac okazało się, że wielu nowszych funkcji, które pojawiły się już dawno w LibreOffice i znacząco uprościłyby algorytm, nie można użyć, gdyż Apache OpenOffice utknął w swoim rozwoju i w wersji 4.1.15 (najnowszej, gdy piszę ten tekst) ciągle nie są one dostępne. Nowy skoroszyt ma tylko jeden arkusz o nazwie takiej samej jak zawierający go plik, czyli „LiczbaNaTekst”. Tak jak w pierwowzorze arkusz jest chroniony hasłem. Kolumny pełniące funkcje pomocniczych obliczeń są ukryte.

Głównym obszarem dostępnym dla użytkownika jest obszar przekazywania liczb i odbierania wyniku słownego. Wygląda on tak:

Obszar wprowadzania i odbierania liczb.
Rys. 13: Obszar wprowadzania liczb i odbierania wyniku.

Do komórek w obszarze A3:A10 należy przekazać liczby. Liczby te mogą mieć co najwyżej 12 cyfr w części całkowitej i nie mogą mieć więcej niż dwóch cyfr po przecinku. To oznacza, że największą liczbą, jaką można przedstawić słownie, jest 999 999 999 999,99 a najmniejszą -999 999 999 999,99 . Liczbę wpisać można w dowolny sposób, z lub bez miejsc po przecinku. W kolumnie A każda wprowadzona liczba jest ukazana jako sformatowana z dwoma miejscami po przecinku. Algorytm sprawdza, czy te warunki są spełnione oraz to, czy przekazana zawartość jest w ogóle liczbą, na ciągu wprowadzonym, a nie na prezentowanym w kolumnie A. Jeśli warunki nie są spelnione, komórka przyjmująca wartość przedstawia ją na czerwonym tle, natomiast komórka wynikowa dla takiego wpisu zawiera tekst „Liczba za duża, wpisano więcej niż dwie cyfry po przecinku, albo to nie jest liczba.”.

W obszarze komórek C3:C10 można wybrać z rozwijanej listy wymagane miano dla liczby w odpowiadającej komórce kolumny A. Komórki można pozostawić puste, wówczas liczby są przedstawione słowami bez miana, ale część ułamkowa liczby, jeśli występuje, zostanie podana z mianem setnych tak jak to widać na ilustracji w drugim i siódmym wierszu liczb.

Tak jak w poprzedniej wersji, odbiór wyniku następuje poprzez utworzenie we własnym arkuszu formuły przejmującej wynik z odpowiedniej komórki w kolumnie B.

Drugi obszar przeznaczony dla użytkownika pozwala ustalić własne opcje dotyczące prezentacji liczby. Wygląda on tak:

Obszar ustawiania opcji.
Rys. 14: Obszar ustawiania opcji arkusza.

Pierwszym ustawieniem jest „Łącznik”. To jest napis lub znak, jakie będą wstawione pomiędzy część całkowitą a ułamkową. Największą część zajmuje jednak obszar przeznaczony na zdefiniowanie mian.

Ponieważ arkusz pozwala jednocześnie otrzymać wynik dla ośmiu liczb, obszar ustawień umożliwia zdefiniowanie do ośmiu mian, na wypadek gdyby każda liczba miała mieć swoje własne miano. Każde miano należy zdefiniować oddzielnie dla części całkowitej oraz ułamkowej. Miana znajdujące się w komórkach obszaru Y4:Y11 są jednocześnie wykazem, jaki pojawia się po wybraniu komórki w kolumnie C. Oczywiste jest, że można mian w ogóle nie wpisywać lub wpisać tylko te potrzebne. Fleksyjność języka polskiego wymusiła na mnie żądanie wpisania miana w trzech postaciach. Pierwszej, do wyrażenia liczebności jednej jednostki miana (jeden złoty), drugiej dla wyrażenia miana dla jednostek o liczebnościach 2 – 4 (dwa złote, trzy złote, cztery złote), ta forma miana jest właściwą także dla liczebności większej niż 20, wtedy gdy ostatnią cyfrą jest 2, 3 lub 4 i trzeciej, dla pozostałych liczebności (pięć złotych). Ponadto dla każdego miana należy podać jego rodzaj gramatyczny, gdyż od tego zależy słowna postać liczby (jeden złoty, jedna korona, jedno euro, dwa złote, dwie korony). W taki sam sposób należy podać miana dla części ułamkowej, jeśli są potrzebne. Ostatnia kolumna tego obszaru, zatytułowana „Zerowy ułamek” decyduje o tym, czy wtedy, gdy część ułamkowa jest równa zero, ma się w postaci słownej pojawić zapis „zero «miano ułamka»”. Wpisanie litery „T” oznacza, że taki zapis ma się pojawić. Efekt zastosowania tego ustawienia widać w wierszach 1., 5. i 6. na rys. 13. W przypadku, gdy nie określono miana dla liczby, słowna postać podana jest gramatycznie w rodzaju męskim, a część ułamkowa pojawi się w postaci ilości setnych tylko wtedy, gdy zawiera ją sama liczba.


Pliki do pobrania.

Zanim pobierzecie Państwo plik, pamiętacie, że za pobranie pliku odpowiada kliknięcie odnośnika prawym przyciskiem myszki i wybranie z wyświetlonego menu pozycji w rodzaju „Zapisz element docelowy jako...” lub „Zapisz link jako...”. Kliknięcie lewym przyciskiem może spowodować inne działania niż pobieranie, jeśli plik danego typu jest zarejestrowany w przeglądarce do specjalnego traktowania.

Aby pobrać starszą wersję skoroszytu programu Calc dla LibreOffice lub Apache OpenOffice, kliknij odnośnik z nazwą pliku: slownie.ods
Aby pobrać nową wersję skoroszytu programu Calc dla Apache OpenOffice, kliknij odnośnik z nazwą pliku: LiczbaNaTekst.ods