Importando datos Excel a una base de datos MySQL con PHP

Compartir

[caption id="attachment_1236" align="aligncenter" width="800"]Importando datos Excel a una base de datos MySQL con PHP Importando datos Excel a una base de datos MySQL con PHP[/caption]

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. PHP-ExcelReader 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:

<?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:

<?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.

Obed Alvarado

Sobre el autor

Artículo redactado por Obed Alvarado. Comparto experiencias prácticas sobre PHP, MySQL, aplicaciones web, instalación en hosting y herramientas para negocios.

Comentarios