Importando datos Excel
Muchas aplicaciones PHP necesitan procesar archivos Excel, para distintos propósitos, lo más común es importar datos desde un archivo e insertarlos en una base de datos.
En este tutorial aprenderemos como importar fácilmente un archivo Excel en formato XLSX e insertar los datos en una base de datos MySQL usando la clase SimpleXLSX.
¿Qué es XLSX?
XLSX es un archivo usado para crear una hoja de cálculo Excel. Fue introducido por Microsoft en Excel 2007. Se basa en XML, lo que facilita la transferencia de datos entre aplicaciones.
Un archivo XLSX almacena los datos en hojas de cálculo en forma de celdas. Las células están contenidas en filas y columnas que pueden tener múltiples propiedades de los datos de celda como estilos, formato, alineación, etc.
XLSX es en realidad un simple archivo que contiene una clase PHP, para gestionar toda la información de las propiedades de la hoja de cálculo.
Pasando un archivo XLSX a PHP
Hay varias maneras de pasar XLSX a PHP. Como se mencionó anteriormente, la clase esta basada en XML.
Hay algunas clases muy populares, disponibles para leer datos de un archivo XLSX usando PHP, entre ellas se encuentran:
1.
2. PHPExcel
3. SimpleXLSX
En este artículo me centraré más en la clase SimpleXLSX y cómo utilizarlo para analizar archivos XLSX e importar sus datos en una base de datos MySQL.
Usando la clase SimpleXLSX podemos obtener los datos de la hoja de cálculo en forma de filas.
Formas de importar XLSX en MySQL
Dado que un archivo XLSX contiene varios archivos, no se puede importar directamente a MySQL. Así que la forma recomendada es convertir el archivo XLSX en un archivo CSV y luego importarlo a la base de datos.
También hay herramientas en línea, que se puede utilizar para ello, en donde solo bastará cargar el archivo XLSX y crear las instrucciones de insertar los datos.
También hay un montón de software de escritorio como: Excel2MySQL, Navicat, MySQL para Excel, etc. Puedes utilizar también la clase SimpleXLSX para convertir los datos conPHP.
Importando XLSX en MySQL con PHP
Como mencioné anteriormente, puede utilizar convertidores XLSX escritos en PHP para importar datos de archivos XLSX en una base de datos MySQL.
Ahora te puedes preguntar, porqué complicarse la vida si hay otras formas mas faciles de importar archivos Excel en una base de datos MySQL
Bueno, puede haber muchas herramientas que faciliten la importación de datos XLSX en una base de datos automáticamente, pero yo he elegido hacer esto usando SimpleXLSX, ya que tengo el control total de los datos .
El primer método que veremos a continuación, consiste en leer un archivo XLSX con PHP y luego cambiarlo a formato CSV e importarlo en MySQL, se puede hacer usando un código similar al siguiente:
1 2 3 4 5 6 7 8 9 10 |
<?php //Incluyo la clase include 'simplexlsx.class.php'; $xlsx = new SimpleXLSX( 'countries_and_population.xlsx' );//Instancio la clase y le paso como parametro el archivo a leer $fp = fopen( 'datos.csv', 'w');//Abrire un archivo "datos.csv", sino existe se creara foreach( $xlsx->rows() as $fields ) {//Itero la hoja de calculo fputcsv( $fp, $fields);//Doy formato CSV a una línea y le escribo los datos } fclose($fp);//Cierro el archivo "datos.csv" ?> |
Usando el código de arriba, puedes pasar un archivo XLSX a un archivo CSV , luego podrás importarlo fácilmente el archivo CSV generado, a una base de datos MySQL.
Ahora el otro método para hacer esto es leer el archivo XLSX y convertirlo en un array, luego importarlo la base de datos, usando las extensiones mysqli o PDO. Puedes hacerlo utilizando un código similar al siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<?php $db_host="localhost"; $db_name="test_excel_mysql"; $db_user="root"; $db_pass=""; include 'simplexlsx.class.php'; $xlsx = new SimpleXLSX( 'countries_and_population.xlsx' ); try { $conn = new PDO( "mysql:host=$db_host;dbname=$db_name", "$db_user", "$db_pass"); $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { echo $sql . "<br>" . $e->getMessage(); } $stmt = $conn->prepare( "INSERT INTO countries_and_population (rank, country, population, date_of_estimate, powp) VALUES (?, ?, ?, ?, ?)"); $stmt->bindParam( 1, $rank); $stmt->bindParam( 2, $country); $stmt->bindParam( 3, $population); $stmt->bindParam( 4, $date_of_estimate); $stmt->bindParam( 5, $powp); foreach ($xlsx->rows() as $fields) { $rank = $fields[0]; $country = $fields[1]; $population = $fields[2]; $date_of_estimate = $fields[3]; $powp = $fields[4]; $stmt->execute(); } |
Descarga el paquete SimpleXLSX
Es bastante fácil leer un archivo XLSX. La clase SimpleXLSX proporciona una manera fácil de leer y convertir cualquier archivo XLSX para que pueda ser procesado de cualquier manera que tu aplicación PHP necesite, o incluso insertar los datos en una base de datos MySQL por ejemplo.
Puedes descargar los archivos usando en este ejemplo en formato ZIP.
DESCARGAR ARCHIVOS
Comparte este artículo con otros desarrolladores de PHP o a colegas que pueden beneficiarse de esta información. Si tienes preguntas o sugerencias, envía un comentario a continuación.