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ón automá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ó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> </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
Lo unico que conseguí fue leer todo los datos anteriores, realizar mi cambio, y grabar todo de nuevo (incluyendo datos anteriores que no modifiqué).Esto es lo que no deseo.
El problema que tengo es que quiero guardar una hoja con casi 900000 filas, pero por cuestion de memoria no puedo hacerlo. Lo que quiero hacer es poder guardar 500filas, luego abrir y guardar 500 más y así.
Lo unico que logré es que en cada graba se envíen de nuevo todos los datos, lo que no me sirve.
Si saben como resolver esto, se los agradeceré.
Muchachos, llevo 3 días tratando de encontrar una librería que me permita coger 1 archivo de EXCEL YA Existente con datos....y poder abrirlo, recorrerlo e insertarle mis datos en unas celdas determinadas.
Para LEERLO Probé con el Spreadsheet_Excel_Reader y efectivamente me lo abre, me lo lee, lo recorre... y perfecto.
Pero para ESCRIBIR en Ese archivo .xls existente obviamente traté de usar Spreadsheet_Excel_Writer y me lo abre, pero no sé como recorrerlo y mucho mas importante REESCRIBIR Cualquier CELDA que yo quiera.
Veo que Exploran y comentan de PHPEXCEL y ya medio me leí la documentación pero no encuentro la parte que pueda abrir 1 .XLS existente con Datos y Poder Modificarlo.
Gracias, si tienen información que me pudiera ayudar agilizar ésto se los agradecería.
Saludos Christian - Colombia
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.
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.
Bueno gracias y espero tu respuesta.
Fatal error: Class 'ZipArchive' not found in E:\Docs\luis\j\www\P\excel2\phpexcel_ejemplo\Classes\PHPExcel\Reader\Excel2007.php on line 324
Sabes si puedo manipular archivos .xlsx con ésta extensión o ¿cómo puedo lograrlo?.
Saludos
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....
Dejar un comentario