2011-04-04 23 views
17

Tengo una matriz de matrices de datos.PHP excel - bucle de datos?

por lo que el formato básico es

$sheet = array(
    array(
    'a1 data', 
    'b1 data', 
    'c1 data', 
    'd1 data', 
), 
    array(
    'a2 data', 
    'b2 data', 
    'c2 data', 
    'd2 data', 
), 
    array(
    'a3 data', 
    'b3 data', 
    'c3 data', 
    'd3 data', 
) 
); 

Cuando me pasé la matriz no tengo ni idea de cuántas columnas o filas habrá. Lo que quiero hacer es usar php excel crear una hoja de Excel fuera de la matriz.

por lo que he visto, la única forma de conjunto de datos es utilizar $objPHPExcel->getActiveSheet()->setCellValue('A1', $value);

Así que mi pregunta es

¿Cómo usted tienen un bucle sobre las células?

recordando que podría haber, por ejemplo, 30 columnas y digamos 70 filas que serían AD70 Entonces, ¿cómo lo bucleas?

¿O existe una función integrada para convertir una matriz en una hoja?

Respuesta

27

Puede configurar los datos de una matriz de este modo:

$objPHPExcel->getActiveSheet()->fromArray($sheet, null, 'A1'); 

fromArray trabaja con matrices 2D. Donde el primer argumento es la matriz 2D, el segundo argumento es qué usar si hay un valor nulo, y el último argumento es donde debe estar la esquina superior izquierda.

De lo contrario, tendría que colocar a través de los datos:

$worksheet = $objPHPExcel->getActiveSheet(); 
foreach($sheet as $row => $columns) { 
    foreach($columns as $column => $data) { 
     $worksheet->setCellValueByColumnAndRow($column, $row + 1, $data); 
    } 
} 
+0

@Mark Baker reparado, y gracias. Realmente aprecio tu trabajo. – Jacob

+0

¿Dónde obtuvimos ** $ rows ** y ** $ columns ** en el bucle foreach anterior? – Aziz

+0

Probablemente debas notar que las matrices 2D funcionan, pero solo en el caso de las matrices normales. –

0

Por lo que yo sé, no es necesario que sepa el alto y el ancho de la hoja de trabajo final de Excel al rellenar una hoja de trabajo utilizando PHP excel. Puede usar un ciclo foreach anidado para leer todas las matrices anidadas y usar las variables apropiadas para crear las referencias de celda y agregarlas a la hoja de trabajo. El complemento manejará el tamaño.

+1

Sí, mi pregunta es, ¿cómo bucle que? – Hailwood

22
$rowID = 1; 
foreach($sheet as $rowArray) { 
    $columnID = 'A'; 
    foreach($rowArray as $columnValue) { 
     $objPHPExcel->getActiveSheet()->setCellValue($columnID.$rowID, $columnValue); 
     $columnID++; 
    } 
    $rowID++; 
} 

o

$objPHPExcel->getActiveSheet()->fromArray($sheet); 
+3

Realmente no puede competir con el desarrollador de PHPExcel: D – Jacob

+0

P.S. Creo que la forma en que los personajes se incrementan en PHP hace que trabajar con celdas de Excel sea mucho más fácil: D – Jacob

+3

@Jacob - el incremento de caracteres es definitivamente útil cuando se trabaja con PHPExcel ... Suelo usar ese truco. –