Próbowałeś kiedyś utworzyć plik *.xls przy pomocy PHP? Dotychczas każdy, kto nie mógł skorzystać z dobrodziejstw technologi COM, musiał okazać sporo wytrwałości i włożyć sporo wysiłku, by umożliwić użytkownikom korzystanie ze wszystkich dobrodziejstw tego formatu.
Od pewnego czasu jest to jednak znacznie łatwiejsze, dzięki zastosowaniu PHP Excel 2007, pozwalającego na wygodne tworzenie plików *.xlsx (nowego, wykorzystywanego przez Microsoft Office 2007 standardu zapisywania plików Excel'a, opartego o Office Open XML)
A my zobaczmy, jak się z tego korzysta, na podstawie prostego przykładu:
<?php include "PHPExcel.php"; include "PHPExcel/Writer/Excel2007.php"; $date = "2007-02-14"; $quotations = array(); $result = mysql_query(" SELECT quotations.*, currencies.mark, subjects.name FROM quotations INNER JOIN currencies ON quotations.currency_id = currencies.id INNER JOIN subjects ON quotations.subject_id = subjects.id WHERE quotations.quotation_date = '$date' ORDER BY currencies.mark, subjects.name "); while ( $row = mysql_fetch_assoc($result) ) { $quotations[$row["mark"]][] = $row; } mysql_free_result($result); $excel = new PHPExcel; $excel->getProperties()->setCreator("Jakub Vrána"); $excel->getProperties()->setLastModifiedBy("Jakub Vrána"); $excel->getProperties()->setTitle("Akcie $date"); $excel->removeSheetByIndex(0); $columns = array("name" => "A", "d_quotation_buy" => "B", "d_quotation_sale" => "C", "v_quotation_buy" => "D", "v_quotation_sale" => "E" ); foreach ( $quotations as $mark => $rows ) { $sheet = $excel->createSheet(); $sheet->setTitle($mark); $sheet->getColumnDimension('A')->setWidth(30); // nastavení ?í?ky prvního sloupce $sheet->setCellValue("A1", "Sm?nárna"); $sheet->setCellValue("B1", "Devizy nákup"); $sheet->setCellValue("C1", "Devizy prodej"); $sheet->setCellValue("D1", "Valuty nákup"); $sheet->setCellValue("E1", "Valuty prodej"); foreach ($rows as $i => $row) { foreach ($columns as $key => $sl) { $sheet->setCellValue($sl . ($i + 2), $row[$key]); } } // dopln?ní pr?m?ru a formátování foreach ($columns as $sl) { $sheet->setCellValue($sl . ($i + 3), ($sl == "A" ? "Pr?m?r" : "=AVERAGE($sl" . "2:$sl" . ($i + 2) . ")")); $sheet->getStyle($sl . 1)->getFont()->setBold(true); $sheet->getStyle($sl . ($i + 3))->getFont()->setBold(true); } } $writer = new PHPExcel_Writer_Excel2007($excel); $writer->save("$date.xlsx");?>
W efekcie otrzymamy plik, wyglądający mniej więcej tak:
Microsoft przygotował Pakiet zgodności formatu plików pakietu Microsoft Office dla programów Word, Excel i PowerPoint 2007, pozwalający na korzystnie z plików w najnowszym formacie również w starszych wersjach Office.
A czemu nie poczytacie XML Reference Schema ?
Co mi po OpenOffice powiedzcie szczerze, jeśli sam OO jest idealny do pisania itp. - ino do momentu próby otworzenia otrzymanego arkusza lub dokumentu Word'a. Niestety większość firm używa Excel'a i np. otrzymam pewne formuły tam zapisane to z OpenOffice wiecie co mogę sobie zrobić.
Poza tym Office 2007 nie jest wcale taki drogi, a wyeksportowanie szablonu xml i operowanie na nim za pomocą php nie jest wcale skomplikowane :)
i co z tego jak driver ODBC nie potrafi korzystac ani z tego formatu ani z htmla... Prawda, ze to ulatwia ale z xml kazdy sobie poradzi chociazby tworzac szablon na bazie dokumentu wygenerowanego przez office ;) Godny uznania bylby skrypt, ktory generuje "prawdziwego" xls'a (jest taki) z mozliwoscia dodania kilku arkuszy (nie ma takiego :/)
Na tej stronie raczej sie promuje PHP, nie M$ Office i nie OpenOffice... To tak samo, jakby powiedzieć żeby nie upubliczniać linka do wersji PHP dla win32.
Witam
Chciałem tylko zapytać od keidy to msoffice jest jakim kolwiek dbrodziestwem? Myślałem, że na takiej stronie będzie się raczej promować OpenOffica a nie firmę billa :/
respect
Warto jednak pamiętać, że HTML nie pozwala na stworzenie pełnego arkusza, z wszystkimi funkcjonalnościami, np. formułami, zakładkami, kolumnami ukrytymi itp.
Tutaj, dzięki użyciu XML jest to nie tylko możliwe, ale i łatwe :)
De facto, wygenerowanie pliku *.xls w php, to żadna filozofia. Wystarczy wygenerować tabelkę w formacie HTML i nadać plikowi typ MIME odpowiedni dla arkuszy Excel.
Rzeczą, która może być godna uwagi w tym projekcie jest możliwość odczytywania tradycyjnych arkuszy, co już nie jest takie proste, jak ich generowanie.