2010-04-06 196 views
45

¿Cómo establecer el valor de celda/columna dinámicamente usando la biblioteca PHPExcel?PHPExcel cómo establecer el valor de celda dinámicamente

Estoy buscando el conjunto de resultados de la base de datos MySQL y quiero escribir datos en formato Excel usando la biblioteca PHPExcel. En cuanto a ejemplo

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

indica que hay que codificar referencia de celda/columna como 'A1', entonces se escribe a la celda/columna A1. ¿Cómo puedo incrementar la referencia de celda/columna y/o fila según las filas y los valores de columna correspondientes del conjunto de resultados?

Por favor guía.

Respuesta

108

I Asume que haya conectado a su base de datos ya.

$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

Gracias Ivo Sabev. – Asif

+0

De nada. –

+6

Una nota del manual: en PHPExcel el índice de columna está basado en 0 mientras que el índice de fila está basado en 1. Eso significa 'A1' ~ (0, 1) –

5

No tengo mucha experiencia trabajando con php pero desde un punto de vista lógico esto es lo que haría.

  1. bucle a través de su conjunto de resultados de MySQL
  2. En Excel que ya debe saber lo que A, B, C debe ser porque esas son las columnas y se sabe cuántas columnas va a devolver.
  3. El número de fila solo se puede aumentar cada vez que pasa el ciclo.

A continuación se muestra un poco de pseudocódigo que ilustra esta técnica:

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

Los resultados pueden no ser uno a uno, sino muchas filas de datos escritas en columnas, que necesitarían un bucle para desplazarse por las columnas. –

Cuestiones relacionadas