Page 1 sur 1

fichier excel génèrer par phpexcel sur navigateur

Posté : 26 juil. 2013, 17:57
par ps6c0tic
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');
}
?>


Re: fichier excel génèrer par phpexcel sur navigateur

Posté : 27 juil. 2013, 12:00
par moogli
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).


@+

Re: fichier excel génèrer par phpexcel sur navigateur

Posté : 22 mars 2017, 16:52
par mdawa88
Merci beaucoup pour votre solution. Elle m'a été d'une grande utilité.

Re: fichier excel génèrer par phpexcel sur navigateur

Posté : 22 mars 2017, 18:12
par moogli
de rien;

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

@+