La Web del Programador: Comunidad de Programadores
 
    Pregunta:  60638 - COMO LEER ARCHIVOS EN EXCEL Y CALCULAR PROMEDIOS, SUMA
Autor:  Ulices Chavez Gutierrea
HOLA.

SOY NUEVO EN PROGRAMACION CON PHP, QUISIERA SABER COMO PUEDO HACERLE PARA LEER UN ARCHIVO DE EXCEL Y HACERLE ALGUNAS MODIFICACIONES COMO LO SON; CALCULAR EL PROMEDIO DE LOS DATOS GUARDADOS EN EL DOCUMENTO.

GRACIAS QUE PASEN UN BUEN DIA..

  Respuesta:  Carlgo Go
Hola. Esta pregunta es muy común, y seguramente en estos foro se ha respondido en varias oportunidades, pero aqui vamos de nuevo!!!... y las que sean necesarias mientras se pueda.

Principalmente lo que planteas (lectura de archivos de MS Excel de manera directa) es de solución algo compleja, sin embargo esto se puede solventar de manera sencilla solamente con guardar el archivo deseado en formato CSV (Valores separados por coma), siendo la principal limitante que este tipo de archivos solo soportan valores alfanuméricos... es decir imágenes, botones y funciones complejas como fórmulas piues no son aceptadas.

Esta pequeña limitante se puede minimizar enlazando el archivo que quieras mostrar en Excel con el archivo CSV que va a contener los datos y sobre el cual va actuar el PHP.

Te recomiendo estudies las funciones de lectura de archivos en PHP
http://es.php.net/function.fopen
http://es.php.net/manual/es/function.fgetcsv.php

Ahora bien para leer un fichero CSV (variables separadas por comas) en PHP te pongo este sencillo ejemplo, leelo varias veces, estúdialo y adáptalo a tus necesidades.

Muchos gestores de bases de datos, páginas web con estadísticas y tablas de información o programas como Excel generan archivos en formato CSV. También es posible que nosotros, en un script php, queramos guardar datos y escojamos este sistema para hacerlo.

Lo que nos ocupa aquí es la forma de leer este tipo de archivos. Lo haremos gracias a la función fgetcsv() de PHP. En el siguiente ejemplo vemos como leer un sencillo fichero csv que hemos llamado "archivo.csv". Los campos están separados por punto y coma (;) y enmarcados en comillas ("). Un ejemplo de archivo.csv podría ser:

"nombre";"apellido";"edad"
"pepito";"grillo";"25"
"leonardo";"blanco","19"
"marieta";"velasco";"18"

Y este mismo archivo lo podemos leer como veremos a continuación. Pero tenemos que tener en cuenta que el siguiente código sirve para leer un archivo csv con tantas columnas como queramos.

<?php
$fp = fopen ( "archivo.csv" , "r" );
while (( $data = fgetcsv ( $fp , 2048, ";","" )) !== false ) { // Mientras hay líneas que leer...

$i = 0;
foreach($data as $row) {

echo "Campo $i: $row<br> "; // Muestra todos los campos de la fila actual
$i++ ;

}

echo "<br /><br /> ";

}
fclose ( $fp );
?>

Este ejemplo muestra todo el contenido de un archivo csv en pantalla y modificándolo un poco podremos utilizarlo para generar una tabla con contenido o para volcar el archivo .csv a una base de datos.
____________________________________________________

Ahora bien, a continuación te pongo un procedimiento de como generar un archivo XLS directamente con información proveniente de PHP... solución muy poco común en foros de respuesta como este...

Crear un archivo de MS Excel desde PHP
______________________________________
Código que muestra como crear un archivo de Microsoft Excel desde PHP, y cambiar algunas propiedades como tamaño, color, anchura, bordes, etc...

<?php
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=result.xls");
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Expires: 0");

/*
http://www.lawebdelprogramador.com
*/
?>

<table border=0>
<tr>
<td style='font-weight:bold;font-size:1.3em;'>Gastos</td>
<td style='font-size:1.2em; width:60px;'>2000</td>
<td style='font-size:1.2em; width:60px;'>2001</td>
<td style='font-size:1.2em; width:60px;'>2002</td>
</tr>
<tr>
<td style='color:#00f;'>Viajes</td>
<td>40,60</td>
<td>43,40</td>
<td>39,80</td>
</tr>
<tr>
<td style='color:#00f'>Comidas</td>
<td>6,5</td>
<td>6,5</td>
<td>3,3</td>
</tr>
<tr>
<td style='color:#00f'>Alojamiento</td>
<td>7,2</td>
<td>7,8</td>
<td>3,2</td>
</tr>
<tr>
<td style='color:#00f'>Totales</td>
<td style='background:#CFD2D8; border-top:1px solid; border-bottom:1px solid; border-left:1px solid;'>=suma(b2:b4)</td>
<td style='background:#CFD2D8; border-top:1px solid; border-bottom:1px solid;'>=c2+c3+c4</td>
<td style='background:#CFD2D8; border-top:1px solid; border-bottom:1px solid; border-right:1px solid;'>=suma(d2:d4)</td>
</tr>
</table>
?>