Importar datos de Excel a base de datos de MySQL usando PHP

Ya vimos cómo exportar datos de MySQL a un libro de Excel. Ahora haremos el proceso inverso: a partir de un archivo de Excel leer algunas hojas y poner sus datos dentro de nuestra base de datos de MySQL.

Digo muy en serio que vamos a hacer el proceso inverso, porque usaré la misma base de datos que en el post anterior así que recomiendo leerlo antes.

Descripción del proyecto

Vamos a leer un archivo de Excel con el lenguaje de programación PHP y una librería llamada PHPSpreadSheet; leeremos las hojas del archivo (que deben seguir un estilo) e insertaremos cada fila.

La estructura de la base de datos es esta:

El documento que vamos a importar es el que se ve en la captura, y que puedes analizar a gusto en mi Google Drive.

Archivo de Excel que vamos a importar hacia MySQL usando PHP

Archivo de Excel que vamos a importar hacia MySQL usando PHP

Sí sí, ya sé que se parece muchísimo al que hicimos en el de exportar los datos, pero el punto no es ese. Además, aquí está formateado y creado con el software propietario de Microsoft.

Nota: ya sé que la existencia no se debería formatear como dinero, se me pasó esa parte pero igualmente no afecta al post.

Repositorio en GitHub

Puedes explorar el código o hacerle un fork desde el repositorio oficial. Si hay actualizaciones igualmente las pondré ahí.

Posts que recomiendo que leas

Aquí suponemos que el archivo está en la ruta en donde se ejecuta el script, pero si deseas que el usuario proporcione el Excel (yo no lo recomendaría, pero allá tú, sobre todo por eso de la seguridad) mira cómo subir un archivo con PHP.

También dejo la lista de posts que de alguna manera son la base de esto que expongo, o tienen alguna relación:

Conectar a la base de datos

Usaré el fragmento que se ve en el tutorial de MySQL:

Vamos a hacer múltiples inserts, así que la sentencia de PDO será preparada antes del ciclo. También se hará uso de las transacciones para que el rendimiento se vea mejorado.

Abrir archivo y acceder a las hojas

El archivo de Excel se abre con el siguiente código:

Para obtener determinada hoja se accede a ella a través de $documento->getSheet($numero). En este caso la primer hoja guarda los productos y la segunda los clientes.

Leer el contenido de cada hoja

Una vez que tenemos la hoja, podemos leer todo su contenido e ir insertando cada valor en la base de datos.

Ya dentro del ciclo podemos obtener el valor dependiendo de la fila en la que vamos, obteniendo cada columna por separado. Ahí mismo ejecutamos la sentencia y le pasamos los valores; esto es para prevenir inyecciones SQL.

Cuando el ciclo termine (bueno, cuando los ciclos para importar ambas hojas terminen) hacemos el commit de la base de datos. Este paso es muy importante, puesto que si no, todo lo que insertamos no se guardará.

$bd->commit();

Con eso aseguramos que los insert sean rápidos, sin afectar el rendimiento ni la seguridad. Oh, por cierto, comenzamos en la fila 2 porque la 1 tiene el encabezado.

Poniendo todo junto

Una vez que ya explicamos paso por paso el código para copiar datos de Excel a MySQL es hora de ver cómo queda el script de PHP final:

El script de la base de datos lo dejé más arriba. Recuerda que la parte de la instalación de PHPSpreadSheet está en el post que dejé arriba.

Demostración: importar desde Excel a MySQL

Adjunto una imagen GIF para demostrar que el proceso realmente funciona.

Importar archivo de Excel a base de datos de MySQL con PHP, PHPSpreadSheet y PDO

Importar archivo de Excel a base de datos de MySQL con PHP, PHPSpreadSheet y PDO

¿Por qué no importar cualquier archivo?

Si te das cuenta, estamos dependiendo mucho de la estructura del archivo Excel. Es decir, no leemos todas las hojas ni importamos a ciegas.

Esto es porque no se debería confiar en datos proporcionados por usuario, si dejamos que importe cualquier número de hojas que se convierten a tablas podríamos tener una seria vulnerabilidad.

Conclusiones

Podríamos hacer miles de cosas más con PHPSpreadSheet, espero tener el tiempo para escribir más sobre el tema.

Como referencia dejo esta página que tiene que ver con la documentación oficial del paquete.

Te invito a leer más sobre:

  1. PHP
  2. MySQL
  3. Bases de datos

No olvides seguirme para estar al tanto de mis actualizaciones 😉


Estoy disponible para trabajar en tu proyecto o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.
Si el post fue de tu agrado muestra tu apoyo compartiéndolo, suscribiéndote al blog, siguiéndome o realizando una donación.

Suscribir por correo

Ingresa tu correo y recibirás mis últimas entradas sobre programación, open source, bases de datos y todo lo relacionado con informática

Únete a otros 1,139 suscriptores


parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

0 Comentarios

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto: