2010-04-06 8 views
45

Wie man Zellen-/Spaltenwert dynamisch unter Verwendung der PHPExcel Bibliothek setzt?PHPExcel Wie man den Zellenwert dynamisch einstellt

Ich hole Resultset von MySQL-Datenbank und ich möchte Daten im Excel-Format mit PHPExcel Bibliothek schreiben. am Beispiel der Suche

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

zeigt, dass wir auf der Festcode Zelle/Spalte Bezug haben als ‚A1‘, dann schreibt sie in Zelle/Spalte A1. Wie kann ich die Zell-/Spalten- und/oder Zeilenreferenz basierend auf Zeilen und entsprechenden Spaltenwerten aus der Ergebnismenge erhöhen?

Bitte führen.

Antwort

108

ich Sie bereits in Ihrer Datenbank verbunden haben asume.

$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++; 
} 
+0

Danke Ivo Sabev. – Asif

+0

Gern geschehen. –

+6

Ein Hinweis aus dem Handbuch: In PHPExcel ist der Spaltenindex 0-basiert, während der Zeilenindex 1-basiert ist. Das bedeutet 'A1' ~ (0,1) –

5

Ich habe nicht viel Erfahrung mit php arbeiten, aber aus logischer Sicht ist das was ich tun würde.

  1. Schleife durch die Ergebnismenge von MySQL
  2. In Excel sollten Sie bereits wissen, was A, B, C sein sollte, weil diejenigen, die Spalten sind, und Sie wissen, wie viele Spalten Sie zurückkehren.
  3. Die Zeilennummer kann einfach jedes Mal durch die Schleife inkrementiert werden.

Nachfolgend finden Sie einige Pseudo-Code veranschaulicht diese Technik:

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); 
    } 
+0

Ergebnisse sind möglicherweise nicht eins zu eins, aber viele Datenzeilen in Spalten geschrieben, die eine Schleife benötigen würden, um sich durch die Spalten zu bewegen. –