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ń.

wtorek, 7 Lipiec 2009 @ 9:02
Jeszcze nie ma komentarzy.

Zostaw komentarz

XHTML: Możesz używać następujących tagów: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>