web-dev-qa-db-fra.com

Utilisation de PHPExcel pour créer des fichiers Excel générés automatiquement

Je souhaite que mon fichier Excel soit rempli de certaines données que j'obtiens de ma base de données, par exemple le nom et l'âge d'une personne.

Disons qu'il y a 10 personnes dans ma base de données. Je veux ces 10 personnes dans mon fichier Excel.

Donc, en gros, vous obtiendriez:

NOM AGE

Personne1 20 ans

Personne2 25 ans

Etc. Je sais comment définir les éléments NAME et AGE, mais comment procéder pour boucler les données et les écrire dans le fichier Excel? Je n'ai rien trouvé à ce sujet dans la documentation de PHPExcel.

Voici mon MySQL:

$query = "SELECT * FROM bestelling"; 

$result = mysql_query($query) or die(mysql_error());

while($row = mysql_fetch_array($result)){
    $name = $row['name'];
    $age = $row['age'];
}
13
Andre

Je suppose que vous avez déjà créé l'objet Excel. Je l'appellerai $ objPHPExcel pour se conformer à leurs exemples. Dans ce cas, vous pouvez boucler votre jeu de résultats et remplir la feuille de calcul de cette façon:

$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
$rowCount = 1;
while($row = mysql_fetch_array($result)){
    $objPHPExcel->getActiveSheet()->SetCellValue('A'.$rowCount, $row['name']);
    $objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowCount, $row['age']);
    $rowCount++;
}
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save('some_Excel_file.xlsx');

EDIT: J'ai mis à jour l'exemple pour fournir une solution complète.

43
davidethell

Voici le code complet pour créer le fichier Excel:

require "PHPExcel/Classes/PHPExcel.php";
require "PHPExcel/Classes/PHPExcel/Writer/Excel5.php"; 

$objPHPExcel = new PHPExcel();
// Set document properties
$objPHPExcel->getProperties()->setCreator("Govinda")
                             ->setLastModifiedBy("Govinda")
                             ->setTitle("Office 2007 XLSX Test Document")
                             ->setSubject("Office 2007 XLSX Test Document")
                             ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
                             ->setKeywords("office 2007 openxml php")
                             ->setCategory("Test result file");

// Add some data
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(5);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(30);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(25);


$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A1', 'Sr no')
            ->setCellValue('B1', 'Name')
            ->setCellValue('C1', 'Age')


// Miscellaneous glyphs, UTF-8
while($row = mysql_fetch_array($result)){
      $objPHPExcel->getActiveSheet()->SetCellValue('A'.$rowCount, $row['name']);
      $objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowCount, $row['age']);
      $rowCount++;
}

// Rename worksheet
$objPHPExcel->getActiveSheet()->setTitle('UserList');
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);

// Redirect output to a client’s web browser (Excel5)
header('Content-Type: application/vnd.ms-Excel; charset=UTF-8');
header('Content-Disposition: attachment;filename="userList.xls"');
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, 'Excel5');
$objWriter->save('php://output');
4
Govinda Yadav