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.
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.
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.
Puedes explorar el código o hacerle un fork desde el repositorio oficial. Si hay actualizaciones igualmente las pondré ahí.
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:
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.
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.
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.
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.
Adjunto una imagen GIF para demostrar que el proceso realmente funciona.
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.
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:
No olvides seguirme para estar al tanto de mis actualizaciones 😉
En ocasiones es necesario leer los pixeles y colores de una imagen con JavaScript del…
Siguiendo con los tutoriales de listas desplegables o select con JavaScript, vamos a ver cómo…
Hoy vamos a ver programar la impresión de un PDF generado a partir de HTML…
En este tutorial básico de JavaScript con HTML vamos a ver cómo llenar una lista…
En este artículo se presenta una guía para imprimir un PDF a partir de una…
En este post voy a enseñarte cómo imprimir un PDF a partir de su representación…
Esta web usa cookies.