You are on page 1of 7

Leer archivos Excel desde PHP

Leer datos de un archivo Excel desde una aplicacin puede resultar muy til en entornos profesionales
donde los distintos departamentos de una organizacin no tienen por qu tener conocimientos sobre el
manejo de bases de datos. Herramientas que realizan acciones sobre datos de Excel estn a la orden del
da y ayudan a automatizar procesos que de otro modo tendran un coste muy elevado en tiempo.

Para PHP, la forma ms cmoda de leer archivos Excel es PHP-ExcelReader , una clase capaz de leer
datos de archivos xls sin utilizar objetos COM, lo que la hace independiente de la plataforma en la que
est el servidor de la aplicacin. Una vez bajada e includa su librera entre las de la aplicacin, se usa
de la siguiente forma:

include('reader.php'); $excel_reader = new Spreadsheet_Excel_Reader(); $excel_reader-


>read("archivo_excel.xls");

Con esto, los datos de archivo_excel.xls estarn cargados en un array de PHP de 2 dimensiones:

$excel_reader->sheets[x][y];

El ndice x es el nmero de hoja del documento, mientras que y , por su parte, puede tomar distintos
valores:

// Numero de filas de la hoja $excel_reader->sheets[0]['numRows'];


// Numero de columnas de la hoja
$excel_reader->sheets[0]['numCols']; // Acceso a los datos de celdas $excel_reader->sheets[0]['cells']
[3][4]; // Informacion sobre la celda $excel_reader->sheets[0]['cellsInfo'][3][4]['raw']; $excel_reader-
>sheets[0]['cellsInfo'][3][4]['type'];
Leer archivos. xls de Excel
Para leer el archivo de Excel he utilizado la librera phpExcelReader, bajo licencia GNU. Para ello
descargamos los archivos y guardamos la carpeta Excel en el directorio de nuestro proyecto. En
la versin que yo he descargado he tenido que hacer una pequea chapuza porque dentro del
archivo reader.php haba un require con una ruta equivocada. La versin que he subido a Github
ya est corregida y funcionando correctamente.

Veamos un pequeo ejemplo de su uso. Leemos el fichero y mostramos en forma de tabla los datos
que hemos obtenido.

<?php

require_once 'Excel/reader.php';

$data = new Spreadsheet_Excel_Reader();

$data->setOutputEncoding('CP1251');

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

echo("<table>");

for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {

echo("<tr>");

for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {

echo("<td>".$data->sheets[0]['cells'][$i][$j] ."</td>");

echo("</tr>");
}

echo("</table>");

echo("</tr>");

}
echo("</table>");

1 <?php
2
3 require_once 'Excel/reader.php';
4
5 $data = new Spreadsheet_Excel_Reader();
6 $data->setOutputEncoding('CP1251');
7 $data->read('fichero.xls');
8 echo("<table>");
9 for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
10 echo("<tr>");
11 for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
12 echo("<td>".$data->sheets[0]['cells'][$i][$j] ."</td>");
13 }
14 echo("</tr>");
15
16 }
17 echo("</table>");

A tener en cuenta
La variable $i controla las filas y la variable $j las columnas. Como generalmente los ttulos de las
columnas aparecen en la primera fila, si queremos obviarla tendremos que comenzar el for con
$i=2 en lugar de con $i=1. De todas maneras, todo esto depender mucho del fichero Excel del
que partamos.

En el ejemplo, para hacer referencia a un valor en concreto, por ejemplo, el almacenado en la


celda B3, tendremos que utilizar
$celdaB3=$data->sheets[0]['cells'][2][3];

$celdaB3=$data->sheets[0]['cells'][2

1 $celdaB3=$data->sheets[0]['cells'][2][3];
Tambin cabe destacar que el objeto dispone de los campos numRows y numCols para almacenar
el nmero total de filas y columnas respectivamente.

Si el archivo Excel cuenta con ms de una hoja de clculo, podemos acceder a cada una de ellas
variando el ndice de sheets:

$celdaB3=$data->sheets[1]['cells'][2][3];//Celda B3 de la hoja 1

$celdaB3=$data->sheets[1]['cells'][2][3];//Celda B3 de la hoja 2

$celdaB3=$data->sheets[2]['cells'][2][3];//Celda B3 de la hoja 3

$celdaB3=$data->sheets[1]['cells'][2][3];//Celda B3 d
$celdaB3=$data->sheets[1]['cells'][2][3];//Celda B3 d
$celdaB3=$data->sheets[2]['cells'][2][3];//Celda B3 d

1 $celdaB3=$data->sheets[1]['cells'][2][3];//Celda B3 de la hoja 1
2 $celdaB3=$data->sheets[1]['cells'][2][3];//Celda B3 de la hoja 2
3 $celdaB3=$data->sheets[2]['cells'][2][3];//Celda B3 de la hoja 3

Grabar ficheros Excel en PHP


Esta es la parte fcil. Para grabar un fichero de Excel solo necesitamos mostrar los datos en una
tabla y cambiar la cabecera del archivo. Como en el ejemplo anterior ya utilic la etiqueta table
para hacer echo de los datos, solo nos quedara cambiar las cabeceras justo antes.
<?php

require_once 'Excel/reader.php

1 <?php
2
3 require_once 'Excel/reader.php';
4
5 $data = new Spreadsheet_Excel_Reader();
6 $data->setOutputEncoding('CP1251');
7 $data->read('fichero.xls');
8
9 //Establecemos las cabeceras para un archivo xls
1 header('Content-type: application/vnd.ms-excel');
0 header("Content-Disposition: attachment; filename=excelenphp.xls");
1 header("Pragma: no-cache");
1 header("Expires: 0");
1
2 //Y mostramos los datos en forma de tabla
1 echo("<table>");
3 for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
1 echo("<tr>");
4
1
5
1
6
1
7
1
8 for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
1 echo("<td>".$data->sheets[0]['cells'][$i][$j] ."</td>");
9 }
2 echo("</tr>");
0
2 }
1 echo("</table>");
2
2
2
3
2
4
2
5
Ejemplo de cdigo para leer una hoja de
Microsoft Excel con PHPExcel

#php

PHPExcel permite trabajar con ficheros Excel .XLS y .XLSX desde php, con las versiones Microsoft
Excel 97 / Excel 2000 / Excel 2002 (XP) / Excel 2003 / Excel 2007.

Una forma posible de hacerlo:


$objReader = PHPExcel_IOFactory::createReader('Excel2007');

$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load("fichero.xlsx");
$objWorksheet = $objPHPExcel->setActiveSheetIndex(1);
//objWorksheet = $objPHPExcel->getActiveSheet();

echo '<table border=1>' . "\n";

foreach ($objWorksheet->getRowIterator() as $row)


{
echo '<tr>' . "\n";
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false);

foreach ($cellIterator as $cell)


{
echo '<td>' . $cell->getValue() . '</td>' . "\n";
}

echo '</tr>' . "\n";


}

echo '</table>' . "\n";

You might also like