![]()
Kai kuriuose web-projektuose reikia rezultatus pateikti Excel faile – ar tai būtų kažkokia ataskaita, ar tiesiog duomenų lentelė išsaugojimui. Laimei, šiuo atveju programuoti beveik reikės mažai, darbas tarp PHP ir XLS realizuotas per puikią biblioteką PHPExcel. Šiame straipsnyje parodysiu, kaip su jos pagalba sukurti elementarų Excel failiuką.
1. Parsisiunčiame ir įdiegiame PHPExcel
Kad parsisiųstumėte, užeikite į phpexcel.codeplex.com, straipsnio rašymo metu paskutinė bibliotekos versija yra 1.7.3c. Jums reikia to punkto, kuris yra prie “Recommended Downloads” – source code. Archyvas užima virš 7 MB diske, o išpakavus – sveria net virš 70 MB. Tačiau nepergyvenkite, iš jų 95% užima dokumentacija, kurios į serverį kelti nereikės (nors niekas nedraudžia ir įkelti, jei norite). Taigi, per FTP įkeliame išarchyvuotus katalogus į serverį, aš tam tikslui susikūriau atskirą katalogą pavadinimu “PHPExcel”. Viskas, biblioteka įkelta, galima su ja dirbti.
2. Sukuriame paprastą Excel dokumentą
include_once 'PHPExcel/Classes/PHPExcel.php'; // įkeliame pačią biblioteką
$pExcel = new PHPExcel();
// aktyvus Sheet'as
$pExcel->setActiveSheetIndex(0);
$aSheet = $pExcel->getActiveSheet();
$aSheet->setTitle('Test 1');
// įrašome reikšmes - tuo pačiu pareklamuosiu savo web-projektus
$aSheet->setCellValue('A1','Nr');
$aSheet->setCellValue('A2','1');
$aSheet->setCellValue('A3','2');
$aSheet->setCellValue('A4','3');
$aSheet->setCellValue('A5','4');
$aSheet->setCellValue('B1','Projektas');
$aSheet->setCellValue('B2','http://www.skaitykit.lt');
$aSheet->setCellValue('B3','http://www.akordai.lt');
$aSheet->setCellValue('B4','http://www.kinoteka.lt');
$aSheet->setCellValue('B5','http://www.manoislaidos.lt');
$aSheet->setCellValue('C1','Dienos lankomumas');
$aSheet->setCellValue('C2','500');
$aSheet->setCellValue('C3','600');
$aSheet->setCellValue('C4','100');
$aSheet->setCellValue('C5','15');
// nurodome vieno stulpelio ilgį
$aSheet->getColumnDimension('B')->setWidth(25);
// ir atiduodame lankytojui į naršyklę
include("PHPExcel/Classes/PHPExcel/Writer/Excel5.php");
$objWriter = new PHPExcel_Writer_Excel5($pExcel);
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="lankomumas.xls"');
header('Cache-Control: max-age=0');
$objWriter->save('php://output');
Viskas, daugiau jokių įmantrybių. Galima, aišku, gilintis į tai, ką reiškia kiekviena eilutė, ypač paskutinėje stadijoje, bet manau, kad tai nebūtina – tiesiog kopijuokite kodą ir modifikuokite pagal save.
3. Šiek tiek pagražinimų
Sekantis klausimas – o kaip gi su šriftų stiliais. Ar galima keisti šrifto dydį, padaryti bold’ą ir t.t. Be abejo, galima. Ir nesunkiai.
// šriftų stiliai
$pagrindinisSriftas = array(
'font'=>array(
'name'=>'Arial Cyr',
'size'=>'10',
'bold'=>false
)
);
$boldSriftas = array(
'font'=>array(
'name'=>'Arial Cyr',
'size'=>'10',
'bold'=>true
)
);
// padarome bold'ą prie stulpelių pavadinimų
$aSheet->getStyle('A1')->applyFromArray($boldSriftas);
$aSheet->getStyle('B1')->applyFromArray($boldSriftas);
$aSheet->getStyle('C1')->applyFromArray($boldSriftas);
// ir pagrindinį šriftą prie visų kitų
for($i=2; $i<6; $i++){
$aSheet->getStyle('A'.$i)->applyFromArray($pagrindinisSriftas);
$aSheet->getStyle('B'.$i)->applyFromArray($pagrindinisSriftas);
$aSheet->getStyle('C'.$i)->applyFromArray($pagrindinisSriftas);
}
4. Pridedame formulių
Excel nebūtų Excel, jei nemokėtų skaičiuoti. Pabandykime įkelti į mūsų paruoštą failą papildomą eilutę sumos skaičiavimui. Kodas atrodytų štai taip.
$aSheet->setCellValue('B6','Viso:')->getStyle('B6')->applyFromArray($boldSriftas);
// formulė sumai suskaičiuoti
$formul = '=SUM(C2:C5)';
$aSheet->getCell('C6')->setDataType(
PHPExcel_Cell_DataType::TYPE_FORMULA)->setValue($formul);
5. Galutinis rezultatas
Ir iš viso to kodo rašymo gaunasi štai toks Excel failiukas.

Detaliai neaiškinau kiekvienos PHP kodo eilutės, kadangi iš esmės ten yra PHPExcel bibliotekų funkcijų panaudojimas, tik reikia sužiūrėti tas funkcijas ir jų parametrus, tai galėsite paskaityti dokumentacijoje, kurios, kaip sakiau, yra virš 70 MB.
Taigi, have fun with Excel!






July 21, 2010 11:35 am
visoms PHP versijoms tinka?
July 21, 2010 11:36 am
The following requirements should be met prior to using PHPExcel:
* PHP version 5.2 or higher
* PHP extension php_zip enabled
* PHP extension php_xml enabled
July 21, 2010 5:59 pm
Šiaip jei reikia paprasčiausio varianto tai užtenka sukurti CSV tipo failą, tačiau vartotojui jį siųsti kaip .xls. Excell puikiai atidaro ir atvaizduoja tokius failus
July 21, 2010 6:01 pm
Jei reikia tiesiog duomenų lentelės – tada taip, bet CSV failo tu nesuformatuosi ir nepadarysi nei bold’ų, nei kitokių stilių. Tad XLS turi privalumų.
July 21, 2010 6:08 pm
Aš ir neneigiu, kad XLS turi privalumų. Tiesiog pateikiau alternatyvą tiem, kurie užklys čia per google ir ieškos tik to “paprasčiausio varianto”
July 22, 2010 11:02 am
Dėkui Povilai!
Puikus straipsnis, tikrai pravertė. :]