PHPExcel, libreria PHP para leer y escribir archivos de Excel

Creo que el título lo dice todo. Esta librería permite leer y manipular el contenido de una hoja de cálculo hecha con Microsoft Excel. Vamos directo al grano y veamos un ejemplo. Usaremos Microsoft Office Excel 2007 para la hoja de cálculo, ósea el archivo tendrá la extensión xlsx. También usaremos la versión 5.2.x de PHP.

1. Descargue la libreria PHPExcel

Descargamos la ultima versión. Después de descomprimirla ubicamos la carpeta Clases y la movemos a una carpeta donde pondremos nuestro ejemplo para este caso se llamará phpexcel_ejemplo. De tal manera que quede así: \ruta_servidor\phpexcel_ejemplo\Clases.

2. Creamos un documentos de Excel

La hoja de cálculo tendrá el siguiente formato: (descargar archivo de ejemplo). La ubicamos en la carpeta phpexcel_ejemplo.

3. Creamos la interfaz web

Mediante HTML creamos una formulario para el ingreso de los valores, y también escribimos código para usar la librería PHPExcel. Este archio lo guardamos con el nombre de index.php en la carpeta phpexcel_ejemplo.

 <?php
/** Incluir la ruta **/
set_include_path(get_include_path() . PATH_SEPARATOR . './Classes/');

/** Clases necesarias */
require_once('PHPExcel.php');
require_once('PHPExcel/Reader/Excel2007.php');

// Variables de la página
$_VIEWDATA = array(
'v_precioTotal' => 0,
'v_descuento' => 0,
'v_precioFinal' => 0
);

// Petición de cálculo?
if (isset($_REQUEST['boton_calcular'])) {
// Cargando la hoja de cálculo
$objReader = new PHPExcel_Reader_Excel2007();
$objPHPExcel = $objReader->load("calculo.xlsx");

// Asignar hoja de calculo activa
$objPHPExcel->setActiveSheetIndex(0);

// Asignar data
$objPHPExcel->getActiveSheet()->setCellValue('automatico', $_REQUEST['transmision_Automatica']);
$objPHPExcel->getActiveSheet()->setCellValue('cuero', $_REQUEST['asientos_Cuero']);
$objPHPExcel->getActiveSheet()->setCellValue('suspension', $_REQUEST['suspension']);

// Calculos
$_VIEWDATA['v_precioTotal'] = $objPHPExcel->getActiveSheet()->getCell('total')->getCalculatedValue();
$_VIEWDATA['v_descuento'] = $objPHPExcel->getActiveSheet()->getCell('descuento')->getCalculatedValue();
$_VIEWDATA['v_precioFinal'] = $objPHPExcel->getActiveSheet()->getCell('final')->getCalculatedValue();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Ejemplo</title>
</head>

<body>
<form id="formulario" method="post" name="formulario" action="index.php">
<table>
<tr>
<th>Transmisi&oacute;n autom&aacute;tica :</th>
<td>
<select id="transmision_Automatica" name="transmision_Automatica">
<?php if(isset($_REQUEST['transmision_Automatica'])) { ?>
<option value="<?php echo $_REQUEST['transmision_Automatica']; ?>" selected="selected"><?php echo $_REQUEST['transmision_Automatica']; ?></option>
<?php } ?>
<option value="No">No</option>
<option value="Si">Si</option>
</select>
</td>
</tr>
<tr>
<th>Asientos de cuero:</th>
<td>
<select id="asientos_Cuero" name="asientos_Cuero">
<?php if(isset($_REQUEST['asientos_Cuero'])) { ?>
<option value="<?php echo $_REQUEST['asientos_Cuero']; ?>" selected="selected"><?php echo $_REQUEST['asientos_Cuero']; ?></option>
<?php } ?>
<option value="No">No</option>
<option value="Si">Si</option>
</select>
</td>
</tr>
<tr>
<th>Suspensi&oacute;n:</th>
<td>
<select id="suspension" name="suspension">
<?php if(isset($_REQUEST['suspension'])) { ?>
<option value="<?php echo $_REQUEST['suspension']; ?>" selected="selected"><?php echo $_REQUEST['suspension']; ?></option>
<?php } ?>
<option value="No">No</option>
<option value="Si">Si</option>
</select>
</td>
</tr>
<tr>
<th>&nbsp;</th>
<td>
<input id="boton_calcular" name="boton_calcular" type="submit" value="Calcular" />
</td>
</tr>
</table>
</form>
<?php if (isset($_REQUEST['boton_calcular'])) { ?>

<h2>Detalles del Precio</h2>
<p>Basado en tus preferencias, el precio de tu carro será S/. <?php echo number_format($_VIEWDATA['v_precioFinal'], 2); ?> Nuevos Soles.</p>
<table>
<tr>
<th>Precio Total:</th>
<td><?php echo number_format($_VIEWDATA['v_precioTotal'], 2); ?> Nuevos Soles</td>
</tr>
<tr>
<th>Descuento:</th>
<td><?php echo number_format($_VIEWDATA['v_descuento'] * 100, 2); ?>%</td>
</tr>
<tr>
<td colspan="2"><hr noshade="noshade"></hr>
</tr>
<tr>
<th>Total Final:</th>
<td><?php echo number_format($_VIEWDATA['v_precioFinal'], 2); ?> Nuevos Soles</td>
</tr>
</table>
<p><a href="index.php">Calcular nuevo precio</a></p>

<?php } ?>
</body>
</html>

4. A probar ...!

Vamos al navegador web y escribirmos http://localhost/phpexcel_ejemplo/index.php y tendremos una interfaz con los datos que obtenemos de la hoja de cálculo.

Seguramente se nos ocurrirá muchas cosas en la cual emplear está interesante librería. ¿Y que tal si la combinamos con AJAX?. La librería PHPExcel contiene documentación detallada para usarla correctamente, además de muchos otros ejemplos.

Comentarios Comentarios formato RSS

  1. avatar Fernando 2010-02-22 01:14:01 26 Hola,resulta que tengo genereados unos archivos xls desde un servidor windows con appache y todo bien, resulta que lo instalo en un servidor ubuntu con php 5.2.10 y no me generaba nada , despues logre q lo generara con formato xlsx., pero si el reporte supera las 2 o 3 paginas tampoco lo genera, como que le falta establidad. pero en server windows anda perfecto, alguna sugerencia ??
  2. avatar aj 2010-02-16 10:37:26 25 oyes bro. tu articulo esta interesante. intento ponerlo en practica, pero aun no lo consigo. qise leer almenos la primera celda para ir avanzando.
    Tengo el siguiente codigo:
    <code>
    require_once('PHPExcel.php');
    require_once('PHPExcel/Reader/Excel2007.php');
    $objReader = new PHPExcel_Reader_Excel2007();
    $objPHPExcel = $objReader->load("calculo.xlsx");
    $objPHPExcel->setActiveSheetIndex(0);
    echo $objWorksheet->getCellByColumnAndRow(1,2)->getValue();
    </code>
    segun la documentacion la ultima puedes obtener el valor de una celda en espesifico pero me arroja el siguente error:

    Parse error: syntax error, unexpected T_OBJECT_OPERATOR, expecting ',' or ';' in /var/www/html/pruebas/zonas/index.php on line 7

    que opinas. quedo en espera de tus comentarios.
  3. avatar borderline 2009-11-25 09:38:56 24 Hola,
    Como puedo conocer el número de filas que contiene el excel leido mediante $objReader->load("calculo.xlsx"); ??

    Gracias por los ejemplos, me ayudaron mucho.
  4. avatar Pablo Avila 2009-11-17 15:37:46 23 hola, gracias por esta aplicacion. Debo decirte que no se nada de php. así que me preguntaba si existe alguna aplicacion que lea un excel y lo codifique en php (es decir la creacion de formulario etc) así luego con el phpexcel poder leerlo en la web. No sé si soy claro. si puedes entra en mi pagina www.ejiba.com.ar y en el boton biblioteca --> herramientas, fijate que tengo unas aplicaciones tipo excel pero que son medias precarias. La idea es poder colocar otros cálculos mas avanzados y con macros etc.
    Bueno gracias y espero tu respuesta.
  5. avatar Frank 2009-11-08 08:48:14 22 Oye no sabras como pasar un archivo CSV a XLS con esta libreria por mas que le intento no me lo hace y de hecho la libreria trabaja estupendamente, pero hacer conversion de CSV a XLS no se presta.
  6. avatar Martin 2009-10-10 11:43:52 21 hice todo y me salio esto
    Fatal error: Class 'ZipArchive' not found in E:\Docs\luis\j\www\P\excel2\phpexcel_ejemplo\Classes\PHPExcel\Reader\Excel2007.php on line 324
  7. avatar Smithmin 2009-08-13 09:00:29 20 Hola como estas??
    Sabes si puedo manipular archivos .xlsx con ésta extensión o ¿cómo puedo lograrlo?.

    Saludos
  8. avatar danieden 2009-08-04 10:33:46 19 PHP Information Version 5.2.3

    esta es la version de mi php y no puedo habilitar las opciones
    "* PHP extension php_zip enabled
    * PHP extension php_xml enabled"

    porque no las tengo....
  9. avatar danieden 2009-08-04 10:28:46 18 Fatal error: Class 'ZipArchive' not found in C:\AppServ\www\phpexcel_ejemplo\Classes\PHPExcel\Reader\Excel2007.php on line 229

    tengo el mismo erro que "guarus"
    2009-04-04 13:21:03 7

    que tiene... Da expliacaciones mas detalladas... Sino para que nos sirve
  10. avatar Fidelito 2009-07-31 13:55:42 17 Hola Chau, chau

Dejar un comentario