Autor Zpráva
sjiamnocna
Profil
Ahoj,
dělám přihlášku na jednu akci, kterou pořádáme, ale hlavní organizátorka potřebuje výstup jako .xlsx, použil jsem PHPExcel, chvíli to fungovalo, ale teď to plive prázdný dokument, bez chyb ale i bez dat.

Mohli byste mi poradit?


Kód pro XLSX je částečně zkopírovaný z PHPExcel/examples/, funkce jsem si doplnil, abych mohl data pridávat "jednodušeji"
function cells(){
$alphabet = range('A','Z');

foreach($alphabet as $char) $chars[] = $char;

foreach($alphabet as $char)
    foreach($alphabet as $subchar)
    $chars[] = $char.$subchar;

return $chars;
}

function maketabledata($content) {
    $alphabet = cells();

    for ($i = 0; $i < count($content); $i++) {

        $row = $i + 1;

        for ($j = 0; $j < count($content[$i]); $j++) {
            $table[$alphabet[$j] . $row] = $content[$i][$j];
        }
    }

    return $table;
}

include_once 'db.php';
include_once 'prices.php';
include_once 'inc/classes/PHPExcel.php';

$rowcontent[0][] = 'Čas přihlášky';
$rowcontent[0][] = 'Jméno a příjmení';
$rowcontent[0][] = 'Datum narození';
$rowcontent[0][] = 'Město';
$rowcontent[0][] = 'Ulice a č.p.';
$rowcontent[0][] = 'Email';
$rowcontent[0][] = 'Telefon';
$rowcontent[0][] = 'Číslo účtu';
$rowcontent[0][] = 'Tlumočník';
$rowcontent[0][] = 'Ubytování';

foreach ($cenyjidlo as $jidlo) {
    $rowcontent[0][] = $jidlo['title'];
}

$rowcontent[0][] = 'Datum platby';
$rowcontent[0][] = 'Cena jídla';
$rowcontent[0][] = 'Účastnický poplatek';
$rowcontent[0][] = 'Skupina';
$rowcontent[0][] = 'Jméno rodiče';
$rowcontent[0][] = 'Kontakt na rodiče';

$res = $con->query("SELECT * FROM `$tablename`");

$i = 1;
while ($row = $res->fetch_assoc()) {
    //čas přihlášky
    $rowcontent[$i][] = $row['posted'];
    //jméno účastníka
    $rowcontent[$i][] = $row['jmeno'];
    //datum narození
    $rowcontent[$i][] = $row['narozeni'];

    //adresa
    $adresa = unserialize($row['adresa']);
    $rowcontent[$i][] = $adresa['mesto'] . ' ' . $adresa['psc'];
    $rowcontent[$i][] = $adresa['ulice'] . ' ' . $adresa['cp'];
    
    //emailová adresa
    $rowcontent[$i][] = $row['email'];
    //telefon
    $rowcontent[$i][] = $row['tel'];
    //číslo účtu platby
    $rowcontent[$i][] = $row['cislouctu'];
    //ochota překládat
    $rowcontent[$i][] = ($row['preklad'] > 0) ? 'Ano' : 'Ne';
    //potřeba ubytování
    $rowcontent[$i][] = ($row['ubytovat'] > 0) ? 'Ano' : 'Ne';

    //objednané jídlo
    $j = 0;
    $jidlo = unserialize($row['jidlo']);
    
    foreach ($cenyjidlo as $chod) {
        $rowcontent[$i][] = $chod['options'][intval($jidlo[$j])];
        $j++;
    }
    
    //datum platby
    $rowcontent[$i][] = $ws[$row['typ']]['title'];
    //cena za stravu
    $rowcontent[$i][] = $row['cenajidlo'];
    //cena workshopu
    $rowcontent[$i][] = $row['cenaws'];
    //skupina
    $rowcontent[$i][] = $row['group'];
    
    
    $rodic = unserialize($row['parent']);
    
    //Jméno rodiče
    $rowcontent[$i][] = $rodic['jmeno'].' '.$rodic['prijmeni'];
    
    //Kontakt na rodiče
    $rowcontent[$i][] = $rodic['tel'].'\n'.$rodic['email'];

    $i++;
}

$objPHPExcel = new PHPExcel();

// Set document properties
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
                             ->setLastModifiedBy("Maarten Balliauw")
                             ->setTitle("Office 2007 XLSX Test Document")
                             ->setSubject("Office 2007 XLSX Test Document")
                             ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
                             ->setKeywords("office 2007 openxml php")
                             ->setCategory("Test result file");

foreach (maketabledata($rowcontent) as $cell => $data) {

    //echo $cell . ' => '. $data . '<br/>';
    $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cell, $data);
}

// Rename worksheet
$objPHPExcel->getActiveSheet()->setTitle('Účastníci');


// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);

// Redirect output to a client’s web browser (Excel2007)
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="ucastniciws.xlsx"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');

// If you're serving to IE over SSL, then the following may be needed
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;
sjiamnocna
Profil
Ještě dodám, že když to chci vypsat do tabulky (<table><tr><td>) funguje to a všechna pole se vypisují. I var_dump vypadá, že to funguje, jen ten excel z toho udělat... Teď mi to dává úplně prázdnou tabulku, bez jakékoli chybové hlášky

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: