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.

Obtener el thumbnail de los videos de Google Video con PHP

Mediante PHP podemos obtener la dirección del thumbnail (imagen pequeña que sirve de previsualización de una imagen más amplia ó un video) de los famosos servicios YouTube ó Metacafe entre otros. Sin embargo, para obtener el thumbnail de los videos de Google, en mi caso, es ó fue un poco dificil hallar la forma. Pero acá les dejo una función que realiza el proceso de manera sencilla. Basta con colocar como único parámetro el código del video. Veamos y luego explicamos.

<?php
function getgooglethumb($videoid)
{
$vrss = file_get_contents("http://video.google.com/videofeed?docid=".$videoid);

if(!empty($vrss))
{
preg_match('/<media:thumbnail url="([^"]+)/',$vrss,$thumbnail_array);
$thumbnail = $thumbnail_array[1];
//Removemos el punto y com -> amp;
$thumbnail = str_replace('amp;','',$thumbnail);
}

return $thumbnail;
}

echo "<img src='".getgooglethumb('2176025602905109829')."' alt='Google Video' />"
?>

La imagen la obtenemos de los feeds de Google Video. Usamos la función file_get_contents, el cual lee el contenido de un archivo y lo pasa a una cadena (en este caso $vrss), recibe como parámetro una URL válida. Mediante la función preg_match realizamos una comparación de expresión regular. Esta función recibe 3 parámetros elementales: la expresión regular, el contenido a analizar (la variable $vrss) y una array de respuesta. Del array de respuesta solo nos interesa la primera coincidencia. Finalmente mediante la función str_replace, removemos el punto y coma (amp;). Así de forma un poco atropellada obtenemos la URL del thumbnail del video de Google.

Mas info file_get_contents, preg_match, str_replace.

Acortar direcciones-url extensas con PHP (función)

Quizás haya notado que en algunos foros, los usuarios colocan direcciones web extensas para llevarnos a un contenido específico, algo así:

http://www.google.com/search?hl=en&client=firefox-a&channel=s&rls=org.mozilla%3Aen-US%3Aofficial&hs=BCR&q=metacafe&btnG=Search

Sin embargo, también habrá notado que estos enlaces a veces son reducidos de longitud para evitar que el diseño de la página se vea afectado, algunos partes de la dirección son reemplazado por puntos suspensivos. Esto hace que se vea más presentable.

http://www.google.com/search?h[ ... ]afe&btnG=Search 

Esto lo podemos lograr con PHP y una sencilla pero poderosa función casera. Veamos:

<?php
function acortarurl($url){
    $longitud = strlen($url);
    if($longitud > 45){
        $longitud = $longitud - 30;
        $parte_inicial = substr($url, 0, -$longitud);
        $parte_final = substr($url, -15);
        $nueva_url = $parte_inicial."[ ... ]".$parte_final;
        return $nueva_url;
    }else{
        return $url;
    }
}

$url_larga = "http://www.google.com.pe/search?hl=en&q=ribosomatic&btnG=Google+Search&meta=";
$url_corta = acortarurl($url_larga);
echo"<a href="$url_larga">$url_corta</a>";
?>

Copien y peguen el código anterior y hagan la prueba en su servidor local y verán el resultado.



Tabla de códigos ASCII

Como parte de un trabajo deseaba tener a la mano una lista ó tabla de codigos ASCII y su correspondiente valor. Así que encontre una que me gusto por su simpleza, haber si también les sirve a alguien. Y si conoces otra ¿por que no la recomiendas?

Tabla ASCII

Visualiza tus archivos PDF en el navegador web sin necesidad de Adobe Reader

Quizás pasamos por este problema: tenemos un gran cantidad de archivos PDF y en la PC del trabajo ú otro lugar no esta instalado el software Adobe Reader, no deseamos descargar el dicho software por el tiempo u otros motivos. ¿Existe algunas solución?

Por supuesto. Existen aplicaciones web que nos permiten visualizar el contenido de nuestros archivos PDF en el navegador sin necesidad de software ó plugin extra. 

1. Utilizando Gmail

Podemos enviar PDF como archivo adjunto a nuestra propia cuenta de Gmail.  Luego podemos abrir el mensaje y hacemos clic en enlace "Visualizar como HTML" que aparece a lado de los archivos adjuntos PDF. 

Gmail PDF 

PDF Escape es una aplicación web para subir, visualizar y editar archivos PDF. Miralo como una versión web de Adobe.

PDF Escape aplicacion web 

Enviar los archivos PDF como archivo adjunto al correo electronico upload@upload.slideshare.net ó subelo a través del navegador web usando este servicio y verás tu archivo PDF como diapositivas/presentacion dentro de la reproductor SlideShare. El motor de la conversión de PDF de SlideShare es impresionante.

Slideshare PDF 

4. Zoho Viewer

Zoho también te permite subir archivos PDF para poder visualizarlos en tu navegador web preferido. 

 Zoho Viewer

5. Samurajdata

Un rápido y eficiente (de un simple interfaz) visor de PDF y otros tipos de archivos. Puedes subir archivos de tu PC ó escribir la URL donde se encuentre tu archivo PDF.

Visor Samurajdata

Ver Artículo Completo ››

Consejos para optimizar tu código PHP

Cuando nuestro proyecto web desarrollado en PHP, por ejemplo un portal, empieza a experimentar éxito en miles de visitas diarias, es allí donde debemos hacer un buen uso del lenguaje para que nuestros proyectos en PHP mantengan un rendimiento satisfactorio. He aquí algunos consejos...

  1. Variables: No declares variables que no se vayan a usar ya que ocupan memoria. Utiliza constantes para aquellos valores que serán fijos a lo largo de la ejecución. A la hora de declarar variables siempre es preferible usar variables estáticas. Intenta evitar el uso de variables globales.
  2. Unset: Aunque PHP dispone de un Garbage Collector (liberador de memoria) no esta de mas usar la función unset para eliminar variables y aumentar la memoria disponible, sobretodo cuando se usan arrays o variables extensas en
    servidores limitados.
  3. Comparaciones: Los switch / case usan mas ciclos de procesador que los if / else, por lo tanto usa estos últimos siempre que puedas.

Ver mas consejos en cibermanuales

Encuesta de la semana: Lenguaje de lado de servidor

Por acá pasan muchos desarrolladores-programadores, y nos gustarían saber qué lenguajes de lado de servidor usan para sus proyectos web.

Resultados de la encuesta anterior: Framework para JavaScript

A los 7 días de colocada la encuesta hay un triple empate: Prototype, jQuery y Mootools con 21 votos cada uno. Los usuarios elegieron y eso se respeta.

 

Como crear un formulario (form) con Flash y PHP

En LayoutGalaxy prepararon un tutorial paso a paso sobre como crear un formulario de envio de datos usando PHP y MySQL. Está muy detallado cada paso, incluso con imágenes como para no perdernos.

Formulario con PHP y Ajax

Descargar el ejemplo

Juego creado con menos de 200 líneas de código en JavaScript

Esto es lo que se puede hacer con las últimas versiones de Prototype (1.6) y script.aculo.us (1.8).

 Esto no es flash!

Se trata de un juego que consiste en eliminar, grupos de bloques adyacentes tanto como nos sea posible y así obtener puntos. Para el desarrollador Gary Haran le tomo 1 día entero de trabajo hacer este jueguito, con menos de 200 líneas de código.

200 lineas de codigo 

Y tu ¿qué puedes hacer con Prototype y script.aculo.us?

Ver Artículo Completo ››

Convierte tus scripts PHP a ejecutable (.exe) con Wapache

He leido algo de ello alguna vez pero no le tome mucho interes, ahora luego de ver la manera fácil como se explica en JasLabs, me anime a probar. ¿Cómo se hace? Existe muchas utilidades (comerciales) para generar una apliación ejecutable (.exe) con nuestro scripts en PHP, pero existe una de código abierto: Wapache (basado en el servidor web Apache). En realidad Wapache, lo que hace es emular una aplicación ejecutable combinando un control de IE embelido y una versión de Apache.

Empezemos descargando la última versión de Wapache, de Sourceforge. Descomprimimos el paquete ZIP, y veremos la siguiente estructura:

Wapache 

Tiene casi la misma estructura del servidor web Apache (por no decir igual). Por defecto trae una ejemplo de aplicación, vamos al directorio bin y ejecutamos Wapache.exe. Los archivos que se usan para emular esa aplicación se encuentran en el directorio htdocs. Es en ese directorio donde debemos colocar nuestros archivos PHP. Para que todo funcione correctamente debe colocar un archivo index.php que será el punto de inicio de la aplicación.

Ahora, vamos al directorio conf y abrimos con un editor de texto el archivo default.wcf, y buscamos la línea (abajo) y cambiamos index.html por index.php.

InitialUrl _app http://wapache/index.php main

Nuevamente vamos al directorio bin y abrimos Wapache, el resultado:

Wapache demo 

La conclusión a la que llegue es que aparte de tus script PHP, todos tus archivos (css, js, imágenes, etc) deben estar en el directorio docs, todos. De lo contrario se mostrarán mensajes indicándote que cierto archivo no se ha encontrado. Cómo en mi caso, probando no salió una imagen que encerré en un circulo rojo en la imágen.

En resumen

  1. Descarga y descomprime
  2. Copia tus archivos a htdocs
  3. Configura en conf/default.wcf
  4. Prueba en bin/Wapache.exe 

Wapache, además te permite agregar menús en la parte superior de la ventan, con lo cual daría un mejor acabado a nuestros proyectos. Pueden encontrar más sobre Wapache aquí. Espero que les sea útil esta información. Y si se me olvido mencionar algo, acepto comentarios.

Navegación

Categorias

Archivos