Advertisement
Guest User

kwota słownie w Excelu - źródło

a guest
Mar 26th, 2014
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 5.05 KB | None | 0 0
  1. $liczba = "A1";
  2.  
  3. # to jest funkcją, żeby w przyszłości móc zmienić na wersję zobfuskowaną
  4. sub jezeli {
  5.     my $warunek = shift;
  6.     my $tak = shift;
  7.     my $nie = shift;
  8.     return "JEŻELI($warunek;$tak;$nie)";
  9. }
  10.  
  11. sub ostatnie_dwie_cyfry {
  12.     my $liczba = shift;
  13.     return "PRAWY(TEKST($liczba;\"00\");2)";
  14. }
  15.  
  16. sub ostatnia_cyfra {
  17.     my $liczba = shift;
  18.     return "PRAWY(TEKST($liczba;\"0\");1)+0";
  19. }
  20.  
  21. sub przedostatnia_cyfra {
  22.     my $liczba = shift;
  23.     my $ostatnie_dwie_cyfry = ostatnie_dwie_cyfry($liczba);
  24.     return "LEWY($ostatnie_dwie_cyfry;1)+0";
  25. }
  26.  
  27. sub mnoga {
  28.     my $liczba = shift;
  29.     my $jeden = shift;
  30.     my $trzy = shift;
  31.     my $siedem = shift;
  32.     my $ostatnia = ostatnia_cyfra($liczba);
  33.     my $przedostatnia = przedostatnia_cyfra($liczba);
  34.     my $czy_jeden = "$liczba=1";
  35.     my $czy_zgody = "ORAZ($ostatnia>=2;$ostatnia<=4;$przedostatnia<>1)";
  36.     my $numer_formy = "($czy_jeden)+($czy_zgody)*2+1";
  37.     my $formy = "{\"$siedem\";\"$jeden\";\"$trzy\"}";
  38.     return "INDEKS($formy;$numer_formy)";
  39. }
  40.  
  41. sub dwucyfrowa_slownie {
  42.     my $liczba = shift;
  43.     my $liczebniki_1_19 = '{"";"jeden";"dwa";"trzy";"cztery";"pięć";"sześć";"siedem";"osiem";"dziewięć";"dziesięć";"jedenaście";"dwanaście";"trzynaście";"czternaście";"piętnaście";"szesnaście";"siedemnaście";"osiemnaście";"dziewiętnaście"}';
  44.     my $ostatnie_dwie_cyfry = ostatnie_dwie_cyfry($liczba);
  45.     my $liczebnik_do_19 = "INDEKS($liczebniki_1_19;$ostatnie_dwie_cyfry+1)";
  46.     my $ostatnia = ostatnia_cyfra($liczba);
  47.     my $przedostatnia = przedostatnia_cyfra($liczba);
  48.     my $liczebniki_20_90 = '{"dwadzieścia";"trzydzieści";"czterdzieści";"pięćdziesiąt";"sześćdziesiąt";"siedemdziesiąt";"osiemdziesiąt";"dziewięćdziesiąt"}';
  49.     my $liczebniki_0_9 = '{"";"jeden";"dwa";"trzy";"cztery";"pięć";"sześć";"siedem";"osiem";"dziewięć"}';
  50.     my $dziesci = "INDEKS($liczebniki_20_90;$przedostatnia-1)";
  51.     my $iles = "INDEKS($liczebniki_0_9;$ostatnia+1)";
  52.     my $dziesciiles = "$dziesci\&\" \"\&$iles";
  53.     return jezeli("$ostatnie_dwie_cyfry+0<20", $liczebnik_do_19, $dziesciiles);
  54. }
  55.  
  56. sub dwucyfrowa_lub_0_slownie {
  57.     my $liczba = shift;
  58.     return jezeli("$liczba=0", '"zero"', dwucyfrowa_slownie($liczba));
  59. }
  60.  
  61. sub trzycyfrowa_slownie {
  62.     my $liczba = shift;
  63.     my $liczebnik_do_99 = dwucyfrowa_slownie($liczba);
  64.     my $liczebniki_100_900 = '{"sto";"dwieście";"trzysta";"czterysta";"pięćset";"sześćset";"siedemset";"osiemset";"dziewięćset"}';
  65.     my $cyfra_setek = "LEWY(TEKST($liczba;\"000\");1)+0";
  66.     my $ewentualne_setki = "INDEKS($liczebniki_100_900;$cyfra_setek)";
  67.     my $setki = jezeli("$cyfra_setek>0", "$ewentualne_setki&\" \"", '""');
  68.     return "$setki&$liczebnik_do_99";
  69. }
  70.  
  71. sub szesciocyfrowa_slownie {
  72.     my $liczba = shift;
  73.     my $sformatowana = "TEKST($liczba;\"000000\")";
  74.     my $grupa_1 = "PRAWY($sformatowana;3)+0";
  75.     my $grupa_2 = "LEWY($sformatowana;3)+0";
  76.     my $liczebnik_1 = trzycyfrowa_slownie($grupa_1);
  77.     my $ewentualny_liczebnik_2 = trzycyfrowa_slownie($grupa_2);
  78.     my $ewentualne_tysiace = mnoga($grupa_2, "tysiąc", "tysiące", "tysięcy");
  79.     my $liczebnik_2 = jezeli("$grupa_2>1", $ewentualny_liczebnik_2, '""') . '&" "&' . jezeli("$grupa_2>0", $ewentualne_tysiace, '""');
  80.     return "$liczebnik_2\&\" \"\&$liczebnik_1";
  81. }
  82.  
  83. # rozbudowana wersja funkcji szesciocyfrowa_slownie
  84. # nie korzysta z funkcji szesciocyfrowa_slownie
  85. sub dwunastocyfrowa_slownie {
  86.     my $liczba = shift;
  87.     my $sformatowana = "TEKST($liczba;\"000000000000\")";
  88.     my $grupa_1 = "FRAGMENT.TEKSTU($sformatowana;10;3)+0";
  89.     my $grupa_2 = "FRAGMENT.TEKSTU($sformatowana;7;3)+0";
  90.     my $grupa_3 = "FRAGMENT.TEKSTU($sformatowana;4;3)+0";
  91.     my $grupa_4 = "FRAGMENT.TEKSTU($sformatowana;1;3)+0";
  92.     my $liczebnik_1 = trzycyfrowa_slownie($grupa_1);
  93.     my $ewentualny_liczebnik_2 = trzycyfrowa_slownie($grupa_2);
  94.     my $ewentualny_liczebnik_3 = trzycyfrowa_slownie($grupa_3);
  95.     my $ewentualny_liczebnik_4 = trzycyfrowa_slownie($grupa_4);
  96.     my $ewentualne_tysiace = mnoga($grupa_2, "tysiąc", "tysiące", "tysięcy");
  97.     my $ewentualne_miliony = mnoga($grupa_3, "milion", "miliony", "milionów");
  98.     my $ewentualne_miliardy = mnoga($grupa_4, "miliard", "miliardy", "miliardów");
  99.     my $liczebnik_2 = jezeli("$grupa_2>1", $ewentualny_liczebnik_2, '""') . '&" "&' . jezeli("$grupa_2>0", $ewentualne_tysiace, '""');
  100.     my $liczebnik_3 = jezeli("$grupa_3>1", $ewentualny_liczebnik_3, '""') . '&" "&' . jezeli("$grupa_3>0", $ewentualne_miliony, '""');
  101.     my $liczebnik_4 = jezeli("$grupa_4>1", $ewentualny_liczebnik_4, '""') . '&" "&' . jezeli("$grupa_4>0", $ewentualne_miliardy, '""');
  102.     return "$liczebnik_4\&\" \"\&$liczebnik_3\&\" \"\&$liczebnik_2\&\" \"\&$liczebnik_1";
  103. }
  104.  
  105. sub liczba_slownie {
  106.     my $liczba = shift;
  107.     return jezeli("$liczba=0", '"zero"', dwunastocyfrowa_slownie($liczba));
  108. }
  109.  
  110. $liczebnik_zl = liczba_slownie("ZAOKR.DO.CAŁK($liczba)");
  111. $zl = mnoga("ZAOKR.DO.CAŁK($liczba)", "złoty", "złote", "złotych");
  112. $grosze = "PRAWY(TEKST(ZAOKR.DO.CAŁK($liczba*100)/100;\"0,00\");2)+0";
  113. $liczebnik_gr = dwucyfrowa_lub_0_slownie($grosze);
  114. $gr = mnoga($grosze, "grosz", "grosze", "groszy");
  115.  
  116. print "=USUŃ.ZBĘDNE.ODSTĘPY($liczebnik_zl\&\" \"&$zl&\" \"\&$liczebnik_gr\&\" \"\&$gr)";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement