web-dev-qa-db-fra.com

PHPExcel comment définir dynamiquement la valeur d'une cellule

Comment définir dynamiquement la valeur d'une cellule/colonne à l'aide de la bibliothèque PHPExcel?

Je récupère l'ensemble de résultats de la base de données MySQL et je veux écrire des données au format Excel à l'aide de la bibliothèque PHPExcel. Regarder l'exemple

$objPHPExcel->getActiveSheet()->setCellValue('A1', 'cell value here');

indique que nous devons coder en dur la référence de cellule/colonne comme 'A1', puis il écrit dans la cellule/colonne A1. Comment puis-je incrémenter la référence de cellule/colonne et/ou de ligne en fonction des lignes et des valeurs de colonne correspondantes du jeu de résultats?

Veuillez guider.

47
Asif

Je suppose que vous vous êtes déjà connecté à votre base de données.

$sql = "SELECT * FROM my_table";
$result = mysql_query($sql);

$row = 1; // 1-based index
while($row_data = mysql_fetch_assoc($result)) {
    $col = 0;
    foreach($row_data as $key=>$value) {
        $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row, $value);
        $col++;
    }
    $row++;
}
114
Ivo Sabev

Je n'ai pas beaucoup d'expérience avec PHP, mais d'un point de vue logique, c'est ce que je ferais.

  1. Parcourez votre jeu de résultats à partir de MySQL
  2. Dans Excel, vous devez déjà savoir ce que devraient être A, B, C car ce sont les colonnes et vous savez combien de colonnes vous retournez.
  3. Le numéro de ligne peut simplement être incrémenté à chaque fois dans la boucle.

Ci-dessous, un pseudocode illustrant cette technique:

    for (int i = 0; i < MySQLResults.count; i++){
         $objPHPExcel->getActiveSheet()->setCellValue('A' . (string)(i + 1), MySQLResults[i].name); 
        // Add 1 to i because Excel Rows start at 1, not 0, so row will always be one off
         $objPHPExcel->getActiveSheet()->setCellValue('B' . (string)(i + 1), MySQLResults[i].number);
         $objPHPExcel->getActiveSheet()->setCellValue('C' . (string)(i + 1), MySQLResults[i].email);
    }
6
Jon