Je suis coincé avec ce problème, il n'affiche pas le fichier Excel réel. S'il vous plaît vérifier mon code ci-dessous:
/** Error reporting */
error_reporting(E_ALL);
/** PHPExcel */
require_once 'PHPExcel.php';
include 'PHPExcel/Writer/Excel2007.php';
// Create new PHPExcel object
#echo date('H:i:s') . " Create new PHPExcel object\n";
$objPHPExcel = new PHPExcel();
$Excel = new PHPExcel();
$objPHPExcel->getProperties()->setTitle("Payroll");
if(!$result){
die("Error");
}
$col = 0;
$row = 2;
while($mrow = mysql_fetch_assoc($result)) {
$col = 0;
foreach($mrow as $key=>$value) {
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row, $value);
$col++;
}
$row++;
}
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'Scholar Id')
->setCellValue('B1', 'Lastname')
->setCellValue('C1', 'Middlename')
->setCellValue('D1', 'Firstname')
->setCellValue('E1', 'Barangay')
->setCellValue('F1', 'Level')
->setCellValue('G1', 'Allowance')
->setCellValue('H1', 'Has claimed?');
$objPHPExcel->getActiveSheet()->getStyle('A1:H1')->getFont()->setBold(true);
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(12);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(18);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(18);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(18);
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(18);
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(12);
$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(12);
$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(14);
$objPHPExcel->getActiveSheet()->getStyle('A1:H1')->getAlignment()- >setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->setShowGridlines(true);
$objPHPExcel->getActiveSheet()->getStyle('A1:H1')->applyFromArray(
array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'color' => array('rgb' => 'FFFF00')
)
)
);
// Save Excel 2007 file
echo date('H:i:s') . " Write to Excel2007 format\n";
#$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
header('Content-Type: application/vnd.ms-Excel');
header('Content-Disposition: attachment;filename="payroll.xlsx"');
header('Cache-Control: max-age=0');
$writer->save('php://output');
Je le fais travailler maintenant! Merci à ceci phpexcel à télécharger
J'ai changé le code en ceci:
// Save Excel 2007 file
#echo date('H:i:s') . " Write to Excel2007 format\n";
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
ob_end_clean();
// We'll be outputting an Excel file
header('Content-type: application/vnd.ms-Excel');
header('Content-Disposition: attachment; filename="payroll.xlsx"');
$objWriter->save('php://output');
Je pense que cette ligne:
ob_end_clean();
résolu mon problème.
Je ne sais pas si je peux aider, j'ai eu le même problème et j'ai résolu avec
ob_end_clean();
je le mets juste après
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
Donc, ne changez pas l'en-tête et sauvegardez-le en tant que xslx, le problème est le tampon!
Assurez-vous que tous les fichiers (par exemple, inclus) sont au format UTF-8 sans BOM .
Vous pouvez identifier cela de différentes manières, par exemple: voir ce link .
Si vous avez besoin de UTF-8 avec BOM -, veuillez utiliser ob_end_clean();
avant la sortie des données dans le navigateur, comme indiqué dans les autres réponses fournies ici.
Le coupable le plus probable s’il s’agit d’un copier-coller de votre script est le
echo date('H:i:s') . " Write to Excel2007 format\n";
Si vous envoyez le navigateur au téléchargement, il ne doit y avoir aucune autre sortie (échos, instructions d'impression, entrées et sorties de PHP) que la sortie générée en php: // sortie par PHPExcel lui-même.
J'ai eu le même problème mais appeler ob_end_clean()
n'a pas fonctionné. Mon CMS (drupal 7) avait foiré mes en-têtes. J'ai donc une nouvelle ligne (hexcode 0A
) au début du contenu, même si j'ai appelé ob_end_clean()
avant la sortie du fichier.
Avec le code ci-dessous, je me suis finalement débarrassé de la nouvelle ligne principale:
for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); }
ob_implicit_flush(1);
ob_clean();
je pense que la solution à ce problème est la même qu'ici: Erreurs de Google Chrome lors de l'exportation d'un fichier XLS avec PHP
ajoutez simplement un espace entre attachement; et nom du fichier , de cette façon:
header("Content-Disposition: attachment; filename=\"Past_Due_Report.xls\"");
comme je peux le voir dans votre propre réponse, c'est ce que vous avez fait et c'est probablement ce qui a résolu votre problème.
J'ai le même problème, le problème est simple. Il suffit de mettre le code ci-dessous:
ob_end_clean();
après :
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');