web-dev-qa-db-fra.com

Utiliser PHPExcel pour exporter vers xlsx

J'utilise PHPEXxcel pour exporter une table HTML générée à l'aide de MYSQL et ainsi de suite.

<?php $query = "SELECT `Firstname`,`Lastname`,`Branch`,`Gender`,`Mobileno`, `Email`  
      FROM `student_details` WHERE Branch IN ('$branch') and `Year`='$year' 
         and Tenthresult > '$tenth' and 
      Twelthresult > '$twelth' and (CGPA > '$cgpa' || CGPA = '$cgpa')";  

$result = mysql_query($query);
confirm_query($result);
$objPHPExcel = new PHPExcel(); 
$objPHPExcel->setActiveSheetIndex(0); 

$rowCount = 1; 
$objPHPExcel->getActiveSheet()->SetCellValue('A'.$rowCount,'Firstname');
$objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowCount,'Lastname');
$objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowCount,'Branch');
$objPHPExcel->getActiveSheet()->SetCellValue('D'.$rowCount,'Gender');
$objPHPExcel->getActiveSheet()->SetCellValue('E'.$rowCount,'Mobileno');
$objPHPExcel->getActiveSheet()->SetCellValue('F'.$rowCount,'Email');

while($row = mysql_fetch_array($result)){ 
    $rowCount++;
    $objPHPExcel->getActiveSheet()->SetCellValue('A'.$rowCount, $row['0']);
    $objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowCount, $row['1']);
    $objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowCount, $row['2']);
    $objPHPExcel->getActiveSheet()->SetCellValue('D'.$rowCount, $row['3']);
    $objPHPExcel->getActiveSheet()->SetCellValue('E'.$rowCount, $row['4']);
    $objPHPExcel->getActiveSheet()->SetCellValue('F'.$rowCount, $row['5']);
} 

$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); 
$objWriter->save('some_Excel_file.xlsx'); 
?>

Cela fonctionne mais il enregistre le fichier xlsx dans le dossier racine sans montrer à l’utilisateur le moindre signe qu’il est en cours de téléchargement . Ce code est rund lorsque je clique sur un bouton. et en montrant à l'utilisateur au début qu'il est en cours de téléchargement avec l'emplacement.

J'ai essayé d'utiliser 

header('Content-Type: application/vnd.ms-Excel');
header('Content-Disposition: attachment;filename="01simple.xls"');
header('Cache-Control: max-age=0'); 

Avec cela, je reçois ce que je voulais ci-dessus, mais le fichier xls téléchargé à l'ouverture montre le message ' .etc. Voulez-vous ouvrir maintenant?

Lors de son ouverture, il contient soit la page HTML complète, soit tout simplement sa page vierge ........ Quelqu'un peut-il m'aider ...?

11
Ankur

Tableur 101

Il existe de nombreux formats de fichier de feuille de calcul différents, chacun avec ses propres extensions de nom de fichier et pouvant être envoyé à un navigateur Web à l'aide de différents types MIME. Celles-ci sont décrites dans la documentation PHPExcel et chacune a son propre Writer différent dans PHPExcel. Vous n'accordez pas deux formats différents

Format BIFF

  • Utilisé par Microsoft Excel entre les versions 95 et 2003 Fichier

  • extension: xls 

  • PHPEXcel Writer: PHPExcel_Writer_Excel5 

  • Type MIME: application/vnd.ms-Excel

Format OfficeOpenXML

  • Utilisé par Microsoft Excel depuis la version 2007

  • Extension de fichier: xlsx

  • PHPEXcel Writer: PHPExcel_Writer_Excel2007

  • Type Mime: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

Ne mélangez pas et ne faites pas correspondre: si vous le faites, alors Excel se plaindra (et à juste titre). Si vous voulez un fichier BIFF, utilisez le fichier BIFF Writer (Excel5) de PHPExcel, une extension de fichier .xls et le type MIME indiqué ci-dessus pour le format BIFF. Si vous souhaitez un fichier OfficeOpenXML, utilisez alors Excel2007 Writer de PHPExcel, une extension de fichier de type .xlsx et le type MIME indiqué ci-dessus pour OfficeOpenXML.

MODIFIER

Notez que les exemples fournis avec la distribution PHPExcel incluent 01simple-download-xls.php et 01simple-download-xlsx.php pour montrer exactement ce que vous voulez.

17
Mark Baker

Le simple fait d'ajouter ces en-têtes n'envoie que ces en-têtes. Le reste de votre code est toujours identique, vous enregistrez donc vos xls dans votre dossier racine comme auparavant. 

Envoi des en-têtes uniquement, la page que vous verriez normalement sera envoyée avec des en-têtes xls. Quelque chose qui n'est pas ce que vous voulez, et vous obtenez votre page HTML mais avec les mauvais en-têtes.

Ce que vous devez faire, c'est envoyer ces en-têtes puis diffuser le fichier xlsx.

En regardant un fil de discussion aléatoire (je sais, mauvaise idée, mais cela vous donnera une longueur d'avance sur ce qu'il faut faire) ici , vous pouvez trouver des exemples comme celui-ci: 

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");;
header("Content-Disposition: attachment;filename=$filename.xls");
header("Content-Transfer-Encoding: binary ");
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); 
$objWriter->setOffice2003Compatibility(true);
$objWriter->save('php://output');
7
Nanne

Je le fais avec l'aide de l'extrait ci-dessous.

// Redirect output to a client’s web browser (Excel2007)
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="test_file.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');
0
Zaid Bin Khalid

essaye ça ..

header('Content-Type: application/vnd.ms-Excel');
    $filename = "Reports".date("d-m-Y-His").".xls";
    header('Content-Disposition: attachment;filename='.$filename .' ');
    header('Cache-Control: max-age=0');
    $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    $objWriter->save('php://output');
0
Yusuf Mawahid