Generowanie arkuszy Excela w PHP
Implementując ostatnio jedną z funkcji portalu potrzebowałem sobie wygenerować plik w formacie XLS. Chodziło mi o przygotowanie pliku XLS w locie, po kliknięciu przez użytkownika przycisku i podanie tak stworzonego pliku użytkownikowi do ściągnięcia.
Znalazłem sporo prostych skryptów, które miały jedną wspólną cechę – nie działały dobrze. Generowały albo uszkodzone pliki XLS, albo stosowały różne obejścia (np. generowanie tabeli w HTML i zapisanie jej z rozszerzeniem XLS
).
W końcu udało mi się znaleźć chyba idealną bibliotekę.
PHPExcel
PHPExcel jest to rozbudowana biblioteka (zajmuje około 5 MB) napisana w PHP do obsługi plików Excela. Nie dość, że zapisuje pliki XLS, to jeszcze potrafi je odczytywać. W dodatku obsługuje różne wersje dokumentów XLS.
Poniżej sposób, który wykorzystałem przy generowaniu przykładowego pliku Excela oraz wyświetleniu użytkownikowi okna pobierania pliku.
<?php // PHPExcel include 'PHPExcel.php'; // PHPExcel_IOFactory include 'PHPExcel/IOFactory.php'; $objPHPExcel = new PHPExcel(); $objPHPExcel->setActiveSheetIndex(0); // ustawienie aktualnego arkusza // tu wypełniamy komórki arkusza $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($Column, $Row, $Value); // (...) // wygenerowanie u użytkownika okna zapisu pliku o podanej nazwie header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="' . $NazwaPliku . '"'); header('Cache-Control: max-age=0'); // zapis pliku do katalogu tymczasowego i wysłanie użytkownikowi do ściągnięcia $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); // albo 'Excel2007' $objWriter->setTempDir("./"); $objWriter->save('php://output'); ?>
Pliki generują się bezproblemowo – nie spotkałem się jeszcze z sytuacją, żeby plik był uszkodzony albo jakichś danych nie było. Jak widać powyżej, można generować zarówno pliki dla starszych wersji Office’a (XLS), jak i dla Office 2007 (XLSX). Tej drugiej możliwości nie testowałem, ale polecam przejrzenie dokumentacji, która jest całkiem przystępnie opracowana i okraszona przykładami.
Biblioteka jest darmowa, na licencji LGPL, zatem można ją swobodnie wykorzystywać do większości zastosowań.
Czytnik RSS