[RESOLU] fichier excel génèrer par phpexcel sur navigateur

Eléphanteau du PHP | 17 Messages

26 juil. 2013, 17:57

Salut la compagnie, voilà je génère un fichier excel avec phpexcel, alors quand je l'enregistre sur un dossier depuis la fonction, ça marche nikel, mais quand je veux qu'il s'ouvre sur le navigateur, le fichier se télécharge et on me dit qu'il est endommagé :s. Est-ce un problème au niveau des entêtes de phpexcel ? Je ne vois pas vraiment comment remédier a ce problème, sachant que moi je veux l'afficher sur le navigateur

	<?php
		function excel_php(){
		include('database_connexion.php');
		include('PHPExcel/Classes/PHPExcel.php');
		include('PHPExcel/Classes/PHPExcel/Writer/Excel2007.php');
		$workbook = new PHPExcel;
		$sheet = $workbook->getActiveSheet();
		$query = $bdd->query("SELECT * FROM conges");
		$nbre=$query->ColumnCount();

			for($i=0;$i<$nbre;$i++){
				$j=$i;
				$sheet->getStyleByColumnAndRow($j++,1)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
				$sheet->getColumnDimensionByColumn($i)->setWidth(20);
			}


			for($i=0;$i<=6;$i++){
				$styleA = $sheet->getStyleByColumnAndRow($i,1);
				$styleA->applyFromArray(array(
				'font'=>array(
				    'bold'=>true,
				    'size'=>12,
				    'color'=>array(
				        'rgb'=>'FF00FF00')),
				'fill'=>array(
					'type'=>PHPExcel_Style_Fill::FILL_SOLID,
					'color'=>array(
					    'argb'=>'FFCC99')),
				'borders'=>array(
					'allborders' => array(
						'style' => PHPExcel_Style_Border::BORDER_DOUBLE,
						'color' => array(
							'rgb' => '808080'
						)
					))));
			}
		$sheet->setCellValueByColumnAndRow(0,1,'Matricule' );
		$sheet->setCellValueByColumnAndRow(1,1,'Collaborateur' );
		$sheet->setCellValueByColumnAndRow(2,1,'BU' );
		$sheet->setCellValueByColumnAndRow(3,1,'Date de Sortie' );
		$sheet->setCellValueByColumnAndRow(4,1,'Date de Retour' );
		$sheet->setCellValueByColumnAndRow(5,1,'Nombre de Jour' );
		$sheet->setCellValueByColumnAndRow(6,1,'Type de Congé' );
		$ligne = 2;
		while($data = $query->fetch()){
			$colonne=0;
			$sheet->setCellValueByColumnAndRow($colonne, $ligne, $data['matricule_co']);
			$sheet->getStyleByColumnAndRow($colonne,$ligne)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
			$sheet->getStyleByColumnAndRow($colonne,$ligne)->getBorders()->applyFromArray(array('allborders' => array('style' => PHPExcel_Style_Border::BORDER_MEDIUM,'color' => array('rgb' => '808080'))));$colonne++;

			$sheet->setCellValueByColumnAndRow($colonne, $ligne, $data['nom_co']);
			$sheet->getStyleByColumnAndRow($colonne,$ligne)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
			$sheet->getStyleByColumnAndRow($colonne,$ligne)->getBorders()->applyFromArray(array('allborders' => array('style' => PHPExcel_Style_Border::BORDER_MEDIUM,'color' => array('rgb' => '808080'))));$colonne++;

			$req1=$bdd->query("SELECT * FROM collaborateurs WHERE matricule='" . $data['matricule_co'] . "'");
			$collaborateur=$req1->fetch();$req1->closeCursor();
			$req1=$bdd->query("SELECT * FROM bu WHERE code_bu='" . $collaborateur['code_bu'] . "'");
			$bu=$req1->fetch();$req1->closeCursor();
			$sheet->setCellValueByColumnAndRow($colonne, $ligne, $bu['nom_bu']);
			$sheet->getStyleByColumnAndRow($colonne,$ligne)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
			$sheet->getStyleByColumnAndRow($colonne,$ligne)->getBorders()->applyFromArray(array('allborders' => array('style' => PHPExcel_Style_Border::BORDER_MEDIUM,'color' => array('rgb' => '808080'))));$colonne++;

			$sheet->setCellValueByColumnAndRow($colonne, $ligne, $data['date_depart']);
			$sheet->getStyleByColumnAndRow($colonne,$ligne)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
			$sheet->getStyleByColumnAndRow($colonne,$ligne)->getBorders()->applyFromArray(array('allborders' => array('style' => PHPExcel_Style_Border::BORDER_MEDIUM,'color' => array('rgb' => '808080'))));$colonne++;

			$sheet->setCellValueByColumnAndRow($colonne, $ligne, $data['date_retour']);
			$sheet->getStyleByColumnAndRow($colonne,$ligne)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
			$sheet->getStyleByColumnAndRow($colonne,$ligne)->getBorders()->applyFromArray(array('allborders' => array('style' => PHPExcel_Style_Border::BORDER_MEDIUM,'color' => array('rgb' => '808080'))));$colonne++;

			$sheet->setCellValueByColumnAndRow($colonne, $ligne, $data['nbre_jour']);
			$sheet->getStyleByColumnAndRow($colonne,$ligne)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
			$sheet->getStyleByColumnAndRow($colonne,$ligne)->getBorders()->applyFromArray(array('allborders' => array('style' => PHPExcel_Style_Border::BORDER_MEDIUM,'color' => array('rgb' => '808080'))));$colonne++;

			$req1=$bdd->query("SELECT * FROM type_conge WHERE id='" . $data['type_conge'] . "'");
			$conge=$req1->fetch();$req1->closeCursor();
			$sheet->setCellValueByColumnAndRow($colonne, $ligne, $conge['libelle']);	$sheet->getStyleByColumnAndRow($colonne,$ligne)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
			$sheet->getStyleByColumnAndRow($colonne,$ligne)->getBorders()->applyFromArray(array('allborders' => array('style' => PHPExcel_Style_Border::BORDER_MEDIUM,'color' => array('rgb' => '808080'))));
			//Ligne à partir de 0; Colonne de 1; Donnée
			$ligne++;}

		$writer = new PHPExcel_Writer_Excel2007($workbook);
		$writer->setOffice2003Compatibility(true);
			header('Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
			header('Content-Disposition:inline;filename=Liste_conge.xlsx ');
			$writer->save('php://output');
}
?>


Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 juil. 2013, 12:00

salut,

Problème similaire à post411425.html, a priori récurent :/

as tu regarder le contenu des deux fichiers pour les comparer (avec notepad++ par exemple?)

sinon tu peux très bien enregistrer la chose dans un fichier temporaire, récupérer le contenu et envoier la chose au navigateur (readfile)


si je trouve un peu de temps j’essaierais ton code (perso j'ai tester le fichier du thread cité plus haut et avec open office pas de soucis pour l'ouvrrir).


@+
Il en faut peu pour être heureux ......

mdawa88
Invité n'ayant pas de compte PHPfrance

22 mars 2017, 16:52

Merci beaucoup pour votre solution. Elle m'a été d'une grande utilité.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 mars 2017, 18:12

de rien;

même 3 ans après je content d'avoir pu t'aider :)

@+
Il en faut peu pour être heureux ......