Manipular archivos Excel con PHP

excel_2007¿Es posible tratar archivos xsl con PHP? pues un alma caritativa se ha currado una librería llamada PHP-ExcelReader basada en otra librería Java que nos permite tratar archivos de Excel con PHP de manera sencilla.

Aquí os dejo un ejemplo bastante simple que abre un archivo .xsl y pinta por pantalla todas las pestañas y su información en una tabla, muy simple, pero seguro que os da las bases para poder hacer lo que necesiteis.

  1. Descargamos la librería desde aquí
  2. Descomprimimos únicamente la carpeta Excel
  3. Abrimos el archivo Excel/read.php y modificamos la línea “require_once ‘Spreadsheet/Excel/Reader/OLERead.php’;” por “require_once ‘oleread.inc’;
  4. Creamos el archivo test.php con el siguiente contenido:
set_time_limit(0);
require_once 'Excel/reader.php';

$data = new Spreadsheet_Excel_Reader();

$data->setOutputEncoding('CP1251');

$data->read('mi_archivo.xls');

for($i=3; $i<count($data->sheets); $i++) {
	echo "<table>";
	for($j=1;$j<count($data->sheets[$i]['cells']); $j++) {
		echo "<tr>";
		for($z=1; $z<count($data->sheets[$i]['cells'][$j]); $z++) {
			echo "<td><center>".$data->sheets[$i]['cells'][$j][$z]."</center></td>";
		}
		echo "</tr>";
	}
	echo "</table>";
	echo "<br/><br/>";
}

Haciendo uso de este ejemplo, nos sería muy fácil almacenar esta información, por ejemplo en una base de datos MySQL, de este modo tendríamos un importador de Excel a MySQL.

NOTA!! He probado los ejemplos que vienen al descargarte la librería y hay que modificar un par de cosas para que funcionen:

  1. Fatal error: Maximum execution time of 60 seconds exceeded: Fácilmente solucianable añadiendo set_time_limit (0) al principio del archivo example.php
  2. Warning: main(Spreadsheet/Excel/Reader/OLERead.php) [function.main]: failed to open stream: No such file or directory: Este error aparece en sistemas Unix porque el include hace referencia al archivo OLERead.php y el nombre está en minúsculas (oleread.php). Modificamos el nombre a mayúsculas y listo.

5 thoughts on “Manipular archivos Excel con PHP

  1. me sale este error
    Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 33030145 bytes) in C:\xampp\htdocs\pruebaxl\Excel\oleread.inc on line 172

  2. Hola Alex,

    Debes cambiar la cantidad máxima de memoria usada definida en el archivo php.ini.

    Si usas Linux, edita el archivo /etc/php5/apache2/php.ini (en Windows no recuerdo donde estaba alojado) y modifica la línea en que dice

    memory_limit = 32M

    por

    memory_limit = 64M

    Con esto debería funcionarte 😉

  3. El archivo de excel que viene en el phpexcelreader.zip esta corrupto. Cambia el archivo excel y funciona
    Saludos

  4. Hola…necesito ayuda 🙁 como hago pa exportar datos de excel a mysql x nombre de columna? no importa en q orden este la columna.si tienen el mismo nombre de columnas varios archivos. como hago para guardarlo en mi bd que tiene los mismos nombres d columnas

  5. Hola que tal corro el archivo de ejemplo y me manda el siguiente mensaje:

    Deprecated: Assigning the return value of new by reference is deprecated in C:\AppServ\www\RevAjustes\Excel\reader.php on line 261

    ¿Cómo se elimina?

Comments are closed.