Bonjour à tous,
J'essaye d'utiliser PHPExcel (bibliothèque très complète et robuste de génération/lecture de fichiers Excel) dans CakePHP.
Premier test, je tente une création toute simple d'un fichier mais sans utiliser le framework CakePHP :
include_once('Excel/PHPExcel.php');
$phpExcel = new PHPExcel();
$phpExcel->getActiveSheet()->setTitle("My Sheet");
$phpExcel->setActiveSheetIndex(0);
$phpExcel->getActiveSheet()->setCellValue('A1', 'Hello World!');
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=\"filename.xls\"");
$objWriter = PHPExcel_IOFactory::createWriter($phpExcel, "Excel5");
$objWriter->save("php://output");
exit;
Au lancement de la page, une pop up apparaît et je peux telecharger le fichier Excel puis lire dedans mon Hello World!.
Second test, je tente de placer ce code dans une vue de CakePHP :
App::import('Vendor', 'PHPExcel', array('file' => 'Excel/PHPExcel.php'));
$phpExcel = new PHPExcel();
$phpExcel->getActiveSheet()->setTitle("My Sheet");
$phpExcel->setActiveSheetIndex(0);
$phpExcel->getActiveSheet()->setCellValue('A1', 'Hello World!');
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=\"filename.xls\"");
$objWriter = PHPExcel_IOFactory::createWriter($phpExcel, "Excel5");
$objWriter->save("php://output");
exit;
Au lancement de la page, une pop up apparaît, je peux telecharger le fichier Excel mais la lecture pose quelques problèmes. On m'indique que le fichier est certainement corrompu et lorsque je cherche mon Hello World! je tombe sur un paquet de caractères illisibles.
J'ai eu ce problème dans un premier temps sans CakePHP, cela venait du fait que j'écrivais avec un echo avant de générer mon fichier Excel -> la corruption venait de là.
Du coup, j'ai tendance à penser que CakePHP fait foirer la génération du fichier parce qu'il écrit qqc avant de lancer la vue ! (les headers par exemple)
Comment dire au contrôleur que pour telles actions (en l'occurence, celle qui va générer mon fichier Excel), il n'inclut pas le header et le footer comme sur toutes les autres pages ??
Merci à vous :]
Problème résolu,
J'avais un espace à la fin de la déclaration de ma classe PHPExcelHelper. "?> " au lieu de "?>"
Après investigations :
J'ai ajouté un $this->layout = null dans l'action.
Si j'écris juste dans ma vue
echo 'Hello World!';
Je pourrai lire dans le code source de la page "_Hello World!" (_ veut dire espace)
Si j'écris la même chose dans un fichier php seul (sans le framework), je lirai dans le code source "Hello World!" (sans l'espace cette fois-ci).
J'ai bien l'impression que le problème vient de cet espace (espace que je retrouve en premier dans les caractères illisibles du fichier Excel).
D'où vient-il dans CakePHP ? Comment le virer ? :/
Tu peux également spécifier le header que tu veux renvoyer, la documentation de CakePHP est assez explicite je trouve.
J'ai spécifié dans mon contrôleur que je ne voulais pas de layout :
public function export() {
$this->autoLayout = false;
}
Mais j'ai toujours le soucis de cet espace qui vient taper l'incruste juste avant l'encodage du fichier XLS ce qui le corrompt.
D'ailleurs, pour tester, j'ai enregistré l'excel corrompu avant de l'ouvrir avec Notepad pour supprimer l'espace du début... après cela l'ouverture du fichier se faisait correctement avec les bonnes data à l'intérieur.
Je persiste donc à dire que le soucis vient de cet espace... mais quelle fonction du framework le rajoute... je ne sais pas (et j'ai pourtant bien cherché).
Bonjour,
je rencontre aujourd'hui le même problème : deux lignes vides au début de mon fichier, ce qui le corrompt.
Avez-vous trouvé la solution depuis ?