Leer un archivo Excel desde PHP

Últimamente me ha tocado exportar e importar archivos Excel usando PHP. En este post explicaré cómo lo hice usando XAMPP y los pasos que seguí.

1. Instalando las librerías necesarias

Para poder leer un archivo Excel vamos a necesitar dos librerías:

La librería Spreadsheet_Excel_Writer es una extensión de PHP que tendremos que instalar usando PEAR. Abriremos una consola y escribiremos:

   pear install Spreadsheet_Excel_Writer

Para instalar la librería Spreadsheet_Excel_Reader iremos a su página principal, descargaremos el paquete y lo descomprimiremos.

Dentro del archivo veremos una carpeta llamada Excel y dentro de ella dos archivos: oleread.inc y reader.php. Copiaremos el archivo reader.php y lo pegaremos en la carpeta “directorio_de_php/pear/Spreadsheet/Excel/”. Luego copiaremos el archivo oleread.inc y lo pegaremos en la carpeta “directorio_de_php/pear/Spreadsheet/Excel/Reader”. Una vez hecho esto, cambiaremos el nombre del archivo oleread.inc a oleread.php.

2. Cargando el archivo Excel en nuestro PHP

	//Cargamos la librería
	require_once 'Spreadsheet/Excel/reader.php';

	//Creamos el objeto y cargamos el fichero Excel
	$data = new Spreadsheet_Excel_Reader();
	$data->read(ruta_del_archivo_excel);

3. Códigos de ejemplo

A continuación os muestro algunos ejemplos de las funciones más sencillas que podemos usar para obtener datos del archivo Excel.

//Obtenemos un libro del Excel
$sheet = $data->sheets[numero_de_libro];

//Obtenemos las celdas
$cells = $data->sheets[0]['cells'];

//Obtenemos una fila determinada
$row = $data->sheets[0]['cells'][numero_de_fila];

//Obtenemos una celda concreta
$data->sheets[0]['cells'][fila][columna];

//Obtenemos el número de filas y columnas del Excel
$nrows = $data->sheets[0]['numRows'];
$ncols = $data->sheets[0]['numCols'];

4. Conclusión

Personalmente, si quieres tratar los datos de un Excel frente a una base de datos, mi recomendación es que importes los datos del Excel a una tabla intermedia en una BD y posteriormente aproveches la potencia de SQL para hacer operaciones con esos datos.

GPU Computing

Hace unos días supe de la mano de @joseluisbriz en una de sus clases que, pese a que nos sorprenda ver ordenadores multi-core de propósito general con 4 núcleos y doble hilo de ejecución como los nuevos i7 de Intel, no estamos hablando de un número bárbaro de núcleos por CPU ya que actualmente nVidia está montando hasta 448 núcleos por GPU en sus nuevos procesadores gráficos destinados a cálculos de alto rendimiento, como el último modelo Tesla C2050/C2070.

Podríamos pensar que el hecho de que se incluyan más de 400 núcleos por GPU podría tratarse de un producto inalcanzable para los usuarios de a pie, pero nada más lejos de la realidad. Vale, es cierto que si nos fijamos en el Tesla C2050 tendríamos que desembolsar unos 2000€, ¿pero qué pasa con otras tarjetas de menor envergadura? Si echamos un vistazo a una Nvidia GT 440, que actualmente está en el mercado por menos de 100€ vemos que tiene 144 núcleos en su GPU. Asombroso.

¿Pero de qué nos puede servir esto? Es cierto que los procesadores gráficos crecen a mayor velocidad que las CPU en relación a número de núcleos, así que Nvidia decidió explotar esta realidad y lanzar en 2007, el SDK de programación CUDA, con el que podemos desarrollar algoritmos destinados a ejecutarse en GPU mediante una sintáxis muy similar a la de C. Este tipo de programación tiene varios inconvenientes frente a la programación general para CPU y es que las GPU tienen algunas limitaciones a la hora de ejecutar ciertos códigos como, recursividad, número de parámetros dinámico, etc. De modo que seguimos necesitando la CPU para realizar ejecutar los algoritmos.

CUDA ofrece una interfaz de desarrollo que abstrae al programador de en qué sitio se está ejecutando cada parte del algoritmo de manera que las partes secuenciales del algoritmo las ejecutará la CPU, mientras que las partes que puedan ejecutarse de forma paralela se realizarán en la GPU, aprovechando así su capacidad para lanzar muchísimos hilos de ejecución aprovechando varios núcleos de la GPU exprimiendo así la potencia de cálculo en paralelo que pueden ofrecer los procesadores gráficos.

En definitiva este era un mundo del cual poco me había informado desde que supe del proyecto [email protected] para encontrar vida extraterrestre gracias a la computación distribuída y el aprovechamiento de la GPU, pero esta es otra historia de la que hablaré en otro momento. Mientras tanto, os diré que no deberíamos perder este asunto de vista porque muy probablemente las aplicaciones se empiecen a programar para aprovechar tanto la CPU como la GPU.

Podéis encontrar más información en los siguientes links:

Actualización:

En la keynote que presentó Nvidia en la Nvidia’s Technical GPU Conference, se mostró el roadmap previsto por la compañía y se vió que los sucesores de Fermi (con 512 núcleos por GPU en la actualidad) serán Kepler yMaxwell llegando a cuatriplicar los GFLOPS por Watio en los próximos 2 años. Una pasada.

Móvil nuevo y la ocasión lo merece

La llegada del nuevo móvil a la familia hace que merezca la pena hacer un recopilatorio de todos aquellos móviles y “no tan móviles” que han pasado por mis manos. Además he estado viendo un post en el que varias personas ponían imágenes de su primer móvil con pantalla a color y la verdad es que me ha parecido curioso.

Motorola Beeper

Sé que no se trata de un móvil pero fue el primer dispositivo que permitía a mis padres ponerse en contacto conmigo allá donde estuviera. El funcionamiento era “sencillo” había que llamar a un número, decirle el mensaje a un operador y el mensaje llegaba al Beeper. Este aparato no daba la posibilidad de contestar y como curiosidad diré que era de la marca Mensatel. Aún lo conservo en funcionamiento pero no lo uso.

Nokia 5110

Se trata de un móvil que heredé de mis padres (en realidad ellos lo compraron y yo me hice con él). Este fue mi primer móvil de verdad. Era enorme, con una pantalla diminuta pero cumplía lo que prometía, la verdad es que no sabías muy bien donde metértelo porque más bien parecía un teléfono fijo de casa.

Nokia 3310

Seguimos con los Nokia, en este caso el modelo 3310. Este móvil fue el primero que tuve en mi propiedad y era un verdadero pepino para su época. Recuerdo que hasta le compré un logotipo de un dragón a cambio de enviar 3 mensajes a no sé qué número. Además tenía el juego de la serpiente y como buen amante de los videojuegos que soy, mi serpiente llegó a ocupar toda la pantalla 🙂

Alcatel 535

Mi primer móvil dentro del programa de puntos de Movistar y también el primero que no se trataba de un Nokia. Este móvil fue además, el primero que tenía pantalla a color y un potente altavoz trasero que por aquel entonces no se veía (no, no lo llevaba puesto por la calle como las juventudes de ahora). Me pasó una cosa curiosa al comrparlo y es que era tan joven y tan pardillo que no supe aprovechar un error en una publicidad que me lo dejaba al 50% de su precio real y por vegüenza terminé pagando el 100% ¡Qué iluso era!

Sony Ericsson K608i

El primer Sony, con pantalla a color, cámara de fotos y ¡Flash!. Este móvil fue de los mejores móviles que han pasado por mis manos y me dejó un buen sabor de boca, la verdad es que se notaba el cuidado que Sony suele imprimir a sus productos.

Nokia 6110 Navigator

Volvemos otra vez con los Nokia gracias a un amago con Movistar, en este caso con un modelo muchísimo más completo que incluía GPS y cámara de fotos. Es de largo, el móvil al que más uso le he sacado y el primero con el que contraté una tarifa de datos. Gracias a aplicaciones como Whatsapp o la suite de Google este móvil fue exprimido al máximo.

HTC Touch

Este móvil fue el primero que tuve táctil y la verdad es que para ser el primero no iba mal, pero se notaba que era un móvil con poco procesador para todo el potencial que podía dar. Además incluía un S.O. Windows que creo que todavía tiene mucho que mejorar y eso que lo trasteé bastante hasta dejarlo con una apariencia bastante decente.

iPhone 4

Resultado de mi primera portabilidad. Es sin lugar a dudas el móvil que más satisfecho me está dejando, si en su día pensaba que Sony y Nokia cuidaban sus productos, el acabado que les da Apple es de sobresaliente. Todavía es pronto para sacar conclusiones más profundas pero a priori, de lo mejorcito.

Emulador de Wii en el PC

Hace poco más de dos semanas salió la versión 2.0 del emulador de Wii Dolphin para Windows y Linux, una vez más los usuarios de Apple se quedan sin pillar cacho.

Ni corto ni perezoso, la descargué, me hice con una copia del New Super Mario y entré a Ebay a comprarme un pack Wiimote & Nunchuck de segunda mano por 19€.

Tengo que decir que tras poco más de 2 horas de juego el resultado es fabuloso. El emulador corre entre 50 y 60 FPS aunque depende del sistema en el que lo estemos ejecutando y del juego que queramos emular.

Pero vayamos al tema. ¿Emula todos los juegos? ¿Sustituye a la Wii? Rotundamente no. Siempre he pensado que un PC nunca sustituye a una consola, cada cosa para lo que son. Con una consola llegas a casa, insertas el disco, coges el mando y juegas. Con un PC la cosa pinta distinta porque los juegos no están hechos para explotar los recursos de un sistema determinado, sino que por el contrario el cliente tiene que comprarse los componentes necesarios para satisfacer los requisitos de cada juego.




¿Funciona con Wiimote y Nunchuck? Así es, ¿sino para qué me hubiera comprado el pack? Dolphin 2.0 incluye un asistente para conectar los mandos (recordar que funcionan por bluetooth y que necesitáis un adaptador para el portatil si no lo tenéis interno) pero tengo que decir que los resultados son bastante “extraños” por lo que me decanté por conectar el Wiimote con Bluesoleil al PC.

¿Da algún problema que conozcas? Alguno sí. Como he dicho, no funciona el 100% de los juegos (ver la lista de compatibilidad), y también es cierto que por ejemplo con mi tarjeta ATI Radeon HD 4670 daba algún problema al configurarlo con OpenGL pero la cosa cambió muchísimo cuando lo configuré para que usara Direct3D, gané entre 30 y 40 FPS y casi un 60% de fluided.

Os resumo:

  • Problemas con ATI: Probar Direct3D.
  • Emula todos los juegos: Un gran porcentaje pero no todos.
  • Problemas para conectar el Wiimote: Usar Bluesoleil.
  • Coste total: unos 30€ de inversión, muy lejos de los 250€ de la consola.
  • Necesidades: Adaptador Bluetooth, Wiimote & Nunchuck, barra sensora (si queréis)
  • Página del emulador de Wii para PC: Dolphin website

En defensa de los derechos fundamentales en internet

Manifiesto “En defensa de los derechos fundamentales en internet”

Ante la inclusión en el Anteproyecto de Ley de Economía sostenible de modificaciones legislativas que afectan al libre ejercicio de las libertades de expresión, información y el derecho de acceso a la cultura a través de Internet, los periodistas, bloggers, usuarios, profesionales y creadores de internet manifestamos nuestra firme oposición al proyecto, y declaramos que…

1.- Los derechos de autor no pueden situarse por encima de los derechos fundamentales de los ciudadanos, como el derecho a la privacidad, a la seguridad, a la presunción de inocencia, a la tutela judicial efectiva y a la libertad de expresión.

2.- La suspensión de derechos fundamentales es y debe seguir siendo competencia exclusiva del poder judicial. Ni un cierre sin sentencia. Este anteproyecto, en contra de lo establecido en el artículo 20.5 de la Constitución, pone en manos de un órgano no judicial – un organismo dependiente del ministerio de Cultura -, la potestad de impedir a los ciudadanos españoles el acceso a cualquier página web.

3.- La nueva legislación creará inseguridad jurídica en todo el sector tecnológico español, perjudicando uno de los pocos campos de desarrollo y futuro de nuestra economía, entorpeciendo la creación de empresas, introduciendo trabas a la libre competencia y ralentizando su proyección internacional.

4.- La nueva legislación propuesta amenaza a los nuevos creadores y entorpece la creación cultural. Con Internet y los sucesivos avances tecnológicos se ha democratizado extraordinariamente la creación y emisión de contenidos de todo tipo, que ya no provienen prevalentemente de las industrias culturales tradicionales, sino de multitud de fuentes diferentes.

5.- Los autores, como todos los trabajadores, tienen derecho a vivir de su trabajo con nuevas ideas creativas, modelos de negocio y actividades asociadas a sus creaciones. Intentar sostener con cambios legislativos a una industria obsoleta que no sabe adaptarse a este nuevo entorno no es ni justo ni realista. Si su modelo de negocio se basaba en el control de las copias de las obras y en Internet no es posible sin vulnerar derechos fundamentales, deberían buscar otro modelo.

6.- Consideramos que las industrias culturales necesitan para sobrevivir alternativas modernas, eficaces, creíbles y asequibles y que se adecuen a los nuevos usos sociales, en lugar de limitaciones tan desproporcionadas como ineficaces para el fin que dicen perseguir.

7.- Internet debe funcionar de forma libre y sin interferencias políticas auspiciadas por sectores que pretenden perpetuar obsoletos modelos de negocio e imposibilitar que el saber humano siga siendo libre.

8.- Exigimos que el Gobierno garantice por ley la neutralidad de la Red en España
, ante cualquier presión que pueda producirse, como marco para el desarrollo de una economía sostenible y realista de cara al futuro.

9.- Proponemos una verdadera reforma del derecho de propiedad intelectual orientada a su fin: devolver a la sociedad el conocimiento, promover el dominio público y limitar los abusos de las entidades gestoras.

10.- En democracia las leyes y sus modificaciones deben aprobarse tras el oportuno debate público y habiendo consultado previamente a todas las partes implicadas. No es de recibo que se realicen cambios legislativos que afectan a derechos fundamentales en una ley no orgánica y que versa sobre otra materia.

Este manifiesto, elaborado de forma conjunta por varios autores, es de todos y de ninguno. Si quieres sumarte a él, difúndelo por Internet.

Via: Merodeando