2010-04-06 56 views
45

Come impostare dinamicamente il valore di cella/colonna utilizzando la libreria PHPExcel?PHPExcel come impostare dinamicamente il valore della cella

Sto recuperando il set di risultati dal database MySQL e voglio scrivere i dati in formato Excel utilizzando la libreria PHPExcel. Guardando esempio

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

indica che abbiamo codificare riferimento di cella/colonna come 'A1', allora scrive alla cella/colonna di A1. Come posso aumentare il riferimento di cella/colonna e/o riga in base alle righe e ai valori di colonna corrispondenti dal set di risultati?

Guida.

risposta

108

I asume si è collegato al database già.

$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

Grazie Ivo Sabev. – Asif

+0

Prego. –

+6

Una nota dal manuale: Nell'indice della colonna PHPExcel è basata su 0 mentre l'indice di riga è basato su 1. Ciò significa 'A1' ~ (0,1) –

5

Non ho molta esperienza di lavoro con PHP ma da un punto di vista logico questo è quello che farei.

  1. Loop attraverso il vostro set di risultati da MySQL
  2. In Excel si dovrebbe già sapere che cosa A, B, C dovrebbe essere perché quelle sono le colonne e sai quante colonne si restituisce.
  3. Il numero di riga può essere incrementato ogni volta attraverso il ciclo.

seguito alcune pseudocodice illustra questa tecnica:

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

I risultati potrebbero non essere uno a uno, ma molte righe di dati scritte su colonne, che necessiterebbero di un ciclo per spostarsi tra le colonne. –

Problemi correlati