Rychlý export databázové tabulky do Excelu (2007/2010) v PHP
MyEgo.cz
Rychlý export databázové tabulky do Excelu (2007/2010) v PHP
Pokud potřebujete rychle exportovat nějaká data - tabulku či VIEW - z MySQL databáze do Excelu, je to v PHP velice snadné díky PHPExcel knihovně na Codeplexu. Kromě moderního XLSX umí tato knihovna i XLS, PDF, CSV a další formáty.
Tento jednoduchý skript vezme VIEW v MySQL databázi (v tomto případě čtenost článků, které nějak souvisí s Microsoftem), vytvoří z nich Excelovský soubor, a nabídne jej ke stažení v Excel 2010 formátu.
class createXLSX {
var $xlsxrow = 1;
var $xlsxcolumn = 1;
var $maxcolumn = 0;
function getColumn($column) {
if ($this->maxcolumn < $column)
$this->maxcolumn = $column;
if ($column > 26)
return chr(ord('A') + floor(($column - 1)/26) - 1) . chr(ord('A') + ($column % 26) - 1);
else
return chr(ord('A') + $column - 1);
}
function writeRow($x, $data, $bold = false) {
$i = 0;
foreach ($data as $s) {
$c = $this->getColumn($this->xlsxcolumn + $i++).strval($this->xlsxrow);
$x->setActiveSheetIndex(0)->setCellValue($c,$s);
if ($bold)
$x->getActiveSheet()->getStyle($c)->getFont()->setBold(true);
}
$this->xlsxrow++;
}
}
Jako první sloupec je dobré uvést názvy položek v daném VIEW, nastavit mu tučné písmo a poté na veškeré sloupce udělat "autosize":
// vytvoreni XLSX
$x = new PHPExcel();
$x->getProperties()->setCreator("Radek Hulán")->setTitle("Stats");
// zapsani dat z VIEW
$xls = new createXLSX();
$q = sql_query("SELECT * FROM ctenost_ms");
$i = 0;
while ($d = sql_fetch_assoc($q)) {
if (!$i++)
$xls->writeRow(&$x, array_keys($d), true );
$xls->writeRow(&$x, array_values($d) );
}
// autosize
for ($i = 1; $i<=$xls->maxcolumn; $i++)
$x->setActiveSheetIndex(0)->getColumnDimension($xls->getColumn($i))->setAutoSize(true);
// stahnuti souboru
$filename = 'MS_'.date('d.m.Y',time()).'.xlsx';
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$filename.'"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($x, 'Excel2007');
$objWriter->save('php://output');
Jednoduchou modifikací parametru v createWriter metodě získáte i další zmíněné formáty.
Výsledek pak vypadá takto:
