Raportowanie w Perlu PROGRAMOWANIE Profesjonalne raportowanie w Perlu Zróbmy to w Excelu Stare powiedzenie, szczególnie po- matów? Otóż przemawia za tym kilka powo- moduł dostarcza interfejsów do maksymalnie dów. Po pierwsze jest to format przenośny, dużej liczby właściwości Excela. Rzeczywiście pularne w gronie użytkowników z którym bez większych problemów radzą so- mnogość metod modułu opisanych w doku- Perla mówi, że wszystko można zro- bie aplikacje linuksowe. Wymienię najważ- mentacji z początku może trochę onieśmielać, niejsze: Gnumeric, OpenOffice i StarOffice, ale nie należy się tym zrażać. Zastosowanie ich bić na wiele sposobów. Zależy to KOffice. Jest więc w czym wybierać. Efekt jest bardzo intuicyjne i nawet osoby niezazna- przenośności możemy spotęgować, tworząc jomione z podejściem obiektowym nie powin- nie tylko od umiejętności i przyzwy- np. własną aplikację raportującą z interfejsem ny mieć większych problemów i będą w stanie czajeń programisty, ale czasami też WWW, czerpiącą dane wprost z korporacyjnej szybko pisać własne raporty. bazy danych. Co więcej, sporządzając raport Żeby to udowodnić, zacznijmy w sposób tra- od potrzeb i przyzwyczajeń odbiorcy w tym formacie, umożliwiamy użytkownikom dycyjny od napisania najprostszego raportu, dokonywanie własnych przeliczeń, sortowanie który de facto niczego nie raportuje, ale pozwa- użytkownika programu. i tym podobne operacje, właściwe dla arkuszy la zapoznać się ze sposobem korzystania z mo- WOJCIECH BOLIMOWSKI kalkulacyjnych. dułu (Listing 1). W pierwszym kroku deklaru- jemy wykorzystanie modułu. Następnie dekla- Koń roboczy moduł rujemy skoroszyt używając konstruktora new, Spreadsheet-WriteExcel do którego przekazujemy jako argument nazwę Główną siłą napędową naszych raportów bę- naszego pliku helloexcel. xls. Potem tworzymy idać to doskonale na przykładzie dzie moduł Spreadsheet-WriteExcel autorstwa arkusz i wreszcie na koniec, w komórce o adre- raportów, gdzie w zależności od Johna McNamary. W chwili pisania tego arty- sie (0,0) wpisujemy napis powitalny. Wtypu grupy odbiorców wymagane kułu, dostępna najnowsza wersja modułu nosi- Pierwszy program za nami, umiemy już jest zastosowanie innego podejścia. O ile ad- ła oznaczenie 0.42. Za pomocą tego modułu utworzyć skoroszyt i arkusz oraz wyświetlać ministratorzy w zupełności zadowalają się można generować binarne pliki w formacie napisy. Czas, żeby przyjrzeć się bliżej możli- zwykłym plikiem tekstowym, o tyle dla od- Excela kompatybilne z wersjami Excel 5, 95, wościom oferowanym przez moduł Spreadshe- biorcy biznesowego konieczne jest zastosowa- 97, 2000 i 2002. et-WriteExcel, a są one naprawdę niemałe. nie bardziej wyszukanego formatu. Perl przy- Jak zaznacza w dokumentacji sam autor, Ogólnie rzecz biorąc, dostępne metody mo- chodzi także i tutaj z pomocą, oferując gotowe moduły do formatowania dokumentów np. Listing 2. Przykłady definiowania szablonów formatowania w XML, PDF, RTF czy choćby formacie Exce- la. Właśnie temu ostatniemu poświęcony bę- 01 my $title = $workbook->addformat (); # tworzenie szablonu jako dzie artykuł. obiektu o nazwie title 02 $title->set_font ('Arial CE'); # przyporządkowanie do szablonu Dlaczego Excel? czcionki... Właśnie, dlaczego Excel, skoro jest tyle in- 03 $title->set_size (14); # i wielkości czcionki nych, być może ideowo bardziej słusznych for- 04 $title->set_bold (); # ustawienie typu na pogrubiony 05 my $head = $workbook->addformat (); # tworzenie innego szablonu 06 $head->set_bold (); Listing 1. Hello Excel 07 $head->set_align ('center'); # tak możemy określić rozmieszczenie 01 #! /usr/local/bin/perl -w 08 $head->set_bottom (); # a tutaj ustawiamy wyświetlanie krawędzi 02 use Spreadsheet:: Write- komórek Excel; # Krok 1 09 $head->set_top (); 03 my $workbook = Spreadshe- 10 $head->set_left (); et:: WriteExcel->new ('hello- 11 $head->set_right (); excel. xls'); 12 $head->set_text_wrap; # ta metoda powoduje, że tekst w komórce bę- 04 $worksheet = $workbook- dzie zawijany >add_worksheet (); 13 my $numrow = $workbook->addformat (); 05 $worksheet->write (0,0, 14 $numrow->set_num_format ('# ### ##0.00'); # tak możemy definiować 'Hello Excel! '); wyświetlanie formatów liczbowych 06 $workbook->close (); 15 $numrow->set_right (); 78 Marzec 2004 www.linux-magazine.pl Raportowanie w Perlu PROGRAMOWANIE wowych metod przedstawionych w przykła- Listing 3. Definiowanie rozmiarów pól dach, możliwe jest m. in. ustawianie koloru 01 $worksheet->set_row (0, undef, $format1); # Zastosowanie formatu czcionek i wypełnienia komórek, osadzanie dla wiersza bitmap, stosowanie formuł itd. Na szczęście 02 $worksheet->set_column ('A: A', 40, $format2); # Zastosowanie in- do modułu dołączona jest obszerna doku- nego formatu dla kolumny 1 i ustawienie szerokości na 40 mentacja z licznymi przykładami, gdzie moż- 03 $worksheet->write ('A1', 'Hello'); # Wyświetlenie napisu na się zapoznać z interesującymi szczegóła- w komórce A1 mi. My natomiast będziemy kontynuować prace nad stworzeniem naszego raportu. Przed przystąpieniem do wyświetlenia da- dułu możemy podzielić na metody związane $report1 = $workbook->U nych pozostaje nam jeszcze określenie wielko- z własnościami skoroszytu, arkusza, komórki, add_worksheet (); # Sheet1 ści komórek. Istnieją tutaj dwie główne meto- układu strony i formatowania. Zanim zbudu- $report2 = $workbook->U dy pozwalające sprawować kontrolę nad wier- jemy pierwszy funkcjonalny raport, przyjrzyj- add_worksheet U szami i kolumnami: set_row i set_column. No my się bliżej niektórym z nich. ('Registered Customers'); U i wreszcie przystępujemy do wyświetlania za- Bardzo istotną z punktu widzenia webowej # Registered Customers wartości komórek. Mamy tutaj do dyspozycji (CGI) aplikacji raportującej jest możliwość metody: write (format ogólny), write_string (do przekierowania standardowego wyjścia. Do te- To co najbardziej nadaje profesjonalizmu ra- wyświetlania łańcuchów tekstowych) i wri- go celu wykorzystujemy specjalną nazwę pliku portowi, to jego wygląd, dlatego szczególną te_number (do wyświetlania liczb). '-'. Dzięki temu zamiast zapisywać dane do pli- uwagę powinniśmy poświęcić zagadnieniom ku, wysyłamy je za pośrednictwem serwera formatowania. Dysponujemy w tym zakresie Budujemy raport WWW wprost do przeglądarki. praktycznie pełnym wachlarzem możliwości Przedstawione do tej pory metody są wystar- Excela. Właściwości formatowania uzyskuje- czające do sporządzenia pierwszego raportu. my $workbook = Spreadsheet:: U my poprzez grupowanie poszczególnych atry- Jedyne co nam pozostaje, to utworzenie inter- WriteExcel->new ('-'); butów w szablony. Do tworzenia poszczegól- fejsu użytkownika i pobranie danych ze zró- nych szablonów formatowania służy metoda dła, w naszym przypadku będzie nim relacyj- Nie musimy się także przejmować obsługą add_format. Przykłady przedstawione na Li- na baza danych Open Source PostgreSQL. bardziej złożonych raportów, składających się stingu 2 pozwalają zapoznać się ze sposobem Do połączenia z bazami danych w Perlu z kilku arkuszy. Kolejne arkusze możemy do- tworzenia własnych szablonów. używane są moduły DBI i DBD. Biblioteka dawać używając metody add_worksheet: To tylko część możliwości. Oprócz podsta- DBI to uniwersalny, ujednolicony interfejs Listing 4. Przykład formularza raportu 01 Monthly Summary 22 02