8 votes

Le fichier excel généré par PHPExcel ne fonctionne pas. (Le format ou l'extension du fichier n'est pas valide)

Le fichier excel généré par PHPExcel ne fonctionne pas. (Le format ou l'extension du fichier n'est pas valide)

L'exemple de code de PHPExcel s'exécute avec succès sur mon PC local, le fichier est téléchargé en local et est ouvert dans Excel 2007 avec succès. Mais l'utilisation du même code sur mon serveur donne un fichier invalide à Excel, qui lorsque je l'ouvre et le répare, alors il s'ouvre avec succès.

Je ne veux pas utiliser l'option Ouvrir et Réparer, mais seulement l'option Ouvrir.

Vous n'avez pas pu trouver le problème ? Veuillez nous aider.

$objPHPExcel->setActiveSheetIndex(0);

//for XLSX
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="item_list.xlsx"');
header('Cache-Control: max-age=0');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');

exit;

30voto

Govind Points 354

Ajouter une ligne ob_end_clean(); à la fin de votre programme avant la ligne $objWriter->save('php://output');

Le code ressemble à : //pour XLSX

$objPHPExcel->setActiveSheetIndex(0);

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');

header('Content-Disposition: attachment;filename="item_list.xlsx"');

header('Cache-Control: max-age=0');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');

ob_end_clean();
$objWriter->save('php://output');

exit;

19voto

Mark Baker Points 90240

Le fichier que vous avez posté a un seul caractère d'espace avant la sortie PHPExcel... vérifiez votre script pour voir où cela pourrait être envoyé au flux de sortie php://. Vérifiez qu'il n'y a pas d'espace avant votre script initial. <?php balise d'ouverture ; faites attention en particulier à ?> <?php ou des étiquettes de fermeture/ouverture similaires. Et vérifiez également tous les fichiers qui pourraient être included par votre script

6voto

Gordon Freeman Points 3482

Vérifiez que le fichier ne contient pas de caractères parasites en l'ouvrant dans un éditeur de texte. Si c'est le cas, vous pouvez probablement déterminer où ils sont introduits. Les espaces ou les sauts de ligne sont des coupables évidents.

Assurez-vous également qu'il n'y a pas d'espaces ou de retours à la ligne avant l'adresse de l'utilisateur. <?php ou à la suite de la balise ?> dans n'importe lequel de vos fichiers.

El xlsx est en fait une collection zippée de xml donc si aucune chaîne de texte évidente (à part la signature PK) n'est visible dans un éditeur de texte, essayez de le décompresser. Cela peut donner d'autres indices sur le problème.

Si vous utilisez une plate-forme Windows, certaines versions de ZipArchive ont connu des bogues. php_zip.dll bibliothèque de liens qui peut causer cette erreur. Vous pouvez utiliser PCLZip comme alternative à ZipArchive.

3voto

IS application/vnd.ms-excel

ET NON

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

EXEMPLE POUR XLS :

$objPHPExcel = new PHPExcel();

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="item_list.xlsx"');
header('Cache-Control: max-age=0');
$objWriter->save('php://output');

EXEMPLE POUR XLSX :

$objPHPExcel = new PHPExcel();

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="item_list.xlsx"');
header('Cache-Control: max-age=0');
$objWriter->save('php://output');

1voto

liyakat Points 7894

L'écriture d'un fichier Excel ne consiste pas simplement à donner à un fichier arbitraire une extension de type xlsx ou xls.

Vous pouvez écrire un fichier xls BIFF5 ou BIFF8 (toutes les versions d'Excel postérieures à 95 le liront), ou il existe le format XML d'Excel 2003, qui peut être ouvert à la fois par Excel 2003 et Excel2007 (ainsi que par Excel 2010).

Pour plus de détails et d'exemples concernant excel 2007, vous pouvez vous référer à l'adresse suivante Exemples de PHPExcel page.

Faites-moi savoir si je peux vous aider davantage.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X