Rychlý export databázové tabulky do Excelu (2007/2010) v PHP

MyEgo.cz

home foto blogy mywindows.cz kontakt

Rychlý export databázové tabulky do Excelu (2007/2010) v PHP

PHP 13.12.10

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:

XLSX