Rapoarte din PHP in Excel si PDF

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
andras
Mesaje:430

Rapoarte din PHP in Excel si PDF

Salut,
Am mai multe tabele html (cu date din MySQL) pe care vreau sa le pun in rapoarte in Excel si Pdf. Pentru Pdf am gasit pe acest site clasa DomPdf. O pot aplica aici? Pentru Excel ce pot folosi? Multumesc.

MarPlo Mesaje:4343
Salut
DomPdf e bun pentru a crea documente de tip PDF din PHP. Incearca o versiune noua (din 2014), nu cea de pe site. Adresa:
github.com/dompdf/dompdf

- Sau poti folosi clasa mPDF, de la:
mpdf1.com/

Pentru a crea documente tip Excel cu PHP, incearca clasa PHPExcel, o gasesti la aceste adrese:
phpexcel.codeplex.com/releases/view/119187 (cu documentatie)
github.com/PHPOffice/PHPExcel

- Sau vezi si tutorialul "PHP: Exporting Data to Excel" de la adresa:
the-art-of-web.com/php/dataexport/

andras Mesaje:430
Cum deschid un fisier Excel generat din PHP de pe server daca serverul este pe Linux iar Excel am doar pe local? O cale ar fi sa salvez fisierul pe local si sa-l deschid. Mai este alta cale? Am folosit instructiunea :

Cod: Selectaţi tot

 header("Content-Type: application/vnd.ms-excel");
(banuiesc ca e forma rudimentara)
Am descarcat PHPExcel dar inca nu stiu s-o folosesc.

MarPlo Mesaje:4343
Nu am lucrat cu PHPExcel, nu stiu cum functioneaza.
Fisierul excel creat poate fi deschisc de un program gen Office instalat pe calculatorul personal, deci trebuie salvat. Alta metoda in browser nu cunosc.

andras Mesaje:430
Salut,
Folosesc clasa PHPExcel fisierul excellist0.php (simplificat):

Cod: Selectaţi tot

<?php
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
$rowCount = 1;
$objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowCount, $titlu);
$rowCount = 2;
while($row = mysql_fetch_array($result)){
$objPHPExcel->getActiveSheet()->SetCellValue('A'.$rowCount, $row['pn']);
$objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowCount, $row['denumire']);
$objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowCount, $row['um']); 
$objPHPExcel->getActiveSheet()->SetCellValue('D'.$rowCount, $row['cantitate']);
$objPHPExcel->getActiveSheet()->SetCellValue('E'.$rowCount, $row['stare0']);
$objPHPExcel->getActiveSheet()->SetCellValue('F'.$rowCount, $row['numeuser']);
$objPHPExcel->getActiveSheet()->SetCellValue('G'.$rowCount, $row['coment']);
$objPHPExcel->getActiveSheet()->SetCellValue('H'.$rowCount, $row['datamodl0']);
$rowCount++;            
}
$filename = "list0_" . date('Ymd'). '.xlsx'; 
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header('Content-Disposition: attachment;filename="' . $filename.'"');
ob_clean();
$objWriter->save('php://output');
exit();
//header('Location: com?');
?>
Problema e ca merge perfect de pe local, dar de pe server nu vrea, in Opera imi zice:

Cod: Selectaţi tot

This webpage is not available
The webpage at http://superbit.ro:1002/casco/excellist0.php might be temporarily down or it may have moved permanently to a new web address. 
iar in Chrome imi zice:" Error code: ERR_INVALID_RESPONSE ".
Sa fie oare de la header-ele pe care le-am pus? Instructiunea

Cod: Selectaţi tot

header('Content-Disposition: attachment;filename="' . $filename.'"');
obliga dechiderea unei ferestre de salvare pe local, iar intructiunea

Cod: Selectaţi tot

$objWriter->save('php://output');
ar trebui sa-mi salveze pe local fisierul excel. Care sa fie cauza? Multumesc.

MarPlo Mesaje:4343
Nu cunosc cauza acelei erori, dar incearca sa identifici.
Sterge unul din header(), apoi pe celalalt; chiar poti testa doar cu un simplu "echo" in acel fisier php sa vezi daca functioneaza.
Adaugi treptat cate un fragment de cod si vezi de la care este problema.

andras Mesaje:430
Chiar asa am facut, eroarea apare la oricare din headere, doar daca le scot pe ambele dispare eroarea dar bineinteles, nici programul nu mai face nimic. Mai studiez sa vad care ar fi problema.

MarPlo Mesaje:4343
Incearca cu aceste headere (toate, dupa ce aplici save() ) pentru fortare download:

Cod: Selectaţi tot

header('Content-Type:   application/vnd.ms-excel; charset=utf-8');
header('Content-Disposition: attachment; filename='. $filename);
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private',false);
Sau faci redirect catre acel fisier excel, cu:

Cod: Selectaţi tot

header('Location: ' . $filename);
- Nefiind un format care se deschide in browser, va apare fereastra de salvare.

andras Mesaje:430
Am schimbat obiectul de tip Excel2007 cu obiect de tip Excel2003 (Excel5) si merge.Am pus asa in fisier (la sfirsit):

Cod: Selectaţi tot

<?php
$filename = "list0_" . date('Ymd'). '.xls';
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="' . $filename.'"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
ob_end_clean();
$objWriter->save('php://output');
exit(); 
?>
si merge si de pe server. Multumesc!