Saltar al contenido
🚀 Lacodigoteca.com

Importar Excel a SQL con PHP

Importar Excel a SQL

En este post vamos a aprender, paso a paso, cómo importar datos de un documento de Excel a SQL con PHP. Para poder leer el archivo Excel de manera adecuada, vamos a tener que utilizaremos una librería de PHP, pero antes, vamos a ver cómo se compone un fichero XLSX.

¿Qúe es XLSX?

Antes de comenzar, debemos saber qué es XLSX. XLSX es un formato de archivo usualmente asociado con hojas Excel. Fue introducido por Microsoft junto con el programa Excel 2007. Está basado en XML lo cual facilita la transferencia de información entre aplicaciones. Un archivo XLSX guarda la información de las hojas en celdas. Las celdas son contenidas en filas y columnas las cuales pueden tener diferentes propiedades como estilo, alineación, etc.

En resumen, XLSX es realmente un archivo comprimido el cual contiene múltiples archivos XML los cuales todos contienen información relevante sobre la hoja Excel.

Existen múltiples formas de leer un archivo XLSX con PHP. Como fue mencionado anteriormente, un archivo XLSX está basado en archivos XML dentro de un ZIP.

Se necesita extraer los archivos del ZIP y leerlos de manera adecuada con un lector XML. Podríamos crear nuestro propio lector XML. No obstante, resulta más fácil utilizar un lector ya creado especializado en leer este tipo de archivos. En este caso, existen algunas extensiones populares las cuales son las siguientes:

  1. Spreatsheet Excel Reader
  2. PHPExcel
  3. SimpleXLSX

En este caso, nos concentraremos en el uso de SimpleXLSX y cómo utilizarlo para leer archivos XLSX e importar aquella data a una base de datos MySQL. Utilizando esta extensión podremos obtener la data del archivo XLSX en filas.

Nuestro fichero Excel

Vamos a tratar de importar el inventario de una frutería que tenemos en un fichero Excel a SQL. Lo llamaremos “inventario.xlxs” y lo subiremos a nuestra carpeta donde alojaremos los demás ficheros. La estructura será la siguiente:

importar excel a sql

Elaboración del código

Para comenzar, empezaremos descargando la librería de SimpleXLSX, la ubicamos en la raiz de nuestra carpeta e importaremos posteriormente la librería en un nuevo archivo PHP de la siguiente forma:

include 'SimpleXLSX.php';

A continuación, vamos a realizar una validación, en el que comprueba que el fichero ‘inventario.xlsx’ existe en nuestro servidor. Para ello, vamos a utilizar la función file_exists de PHP.

if(file_exists('inventario.xlsx')){
//Aquí seguiremos con el código
}else{
echo "El fichero no existe";
}

Una vez comprobado que existe el dichero excel, vamos a crear una nueva instancia SimpleXLSX del archivo que queremos leer. Esto lo almacenaremos en una variable $xlsx.

$xlsx = new SimpleXLSX('inventario.xlsx');

Antes de empezar la lectura nos conectaremos a la base de datos mediante el uso de PDO. En este caso haremos la conexión de la siguiente manera (dependerá de qué conexión desean utilizar).

$conn = new PDO( "mysql:host=localhost;dbname=mibasededatos", "usuario", "clave");
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Una vez conectados, crearemos la consulta SQL para insertar la información. Para esto, recordemos que tenemos que tener en cuenta que, en nuestro archivo “inventario.xlsx” tiene 7 campos diferentes en el siguiente orden: 

  • Código
  • Artítulo
  • PVP
  • Existencias
  • Entrada
  • Salida
  • Stock

Así mismo, nuestra base de datos también contendrá aquellos campos donde insertaremos la información que iremos recolectando.

$stmt = $conn->prepare('INSERT INTO inventario (codigo,articulo,pvp,existencias,entrada,salida,stock) VALUES (?,?,?,?,?,?,?)');

Luego haremos la vinculación de las variables (que por ahora se encuentran vacías) con cada uno de los diferentes campos de nuestra base de datos.

	$stmt->bindParam(1,$codigo);
	$stmt->bindParam(2,$articulo);
	$stmt->bindParam(3,$pvp);
	$stmt->bindParam(4,$existencias);
	$stmt->bindParam(5,$entrada);
	$stmt->bindParam(6,$salida);
	$stmt->bindParam(7,$stock);

Luego de hacer la vinculación, debemos empezar a leer el archivo línea por línea. Esto lo lograremos mediante un bucle foreach de la siguiente forma. En cada iteración, leeremos cada una de las filas del archivo y ejecutaremos la consulta previamente creada.

//Recorremos los campos del fichero
foreach ($xlsx->rows() as $fila => $campo){
	//Evitamos la primera columna, ya que tendrán las cabeceras.
	if($fila<=1){
		continue;
	}
	$codigo = $campo[0];
	$articulo = $campo[1];
	$pvp = $campo[2];
	$existencias = $campo[3];
	$entrada = $campo[4];
	$salida = $campo[5];
	$stock = $campo[6];
	$stmt->execute();
}

Con esto, hemos logrado leer cada fila del archivo Excel y luego ejecutado la inserción a la base de datos MySQL mediante $stmt->execute().

Código completo

Una vez finalizados los pasos, ya tenemos el archivo resultante debe tener la siguiente estructura y código para poder importar datos de Excel a SQL:

<?php

include 'SimpleXLSX.php';

if(file_exists('inventario.xlsx')){
	$xlsx = new SimpleXLSX('inventario.xlsx');

	// Nos conectamos a la BBDD
	$conn = new PDO('mysql:host=localhost;dbname=lacodigo_pruebas', 'lacodigo_pruebas', 'lacodigoteca');
$conn = new PDO( "mysql:host=localhost;dbname=mibasededatos", "usuario", "clave");
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);	
	$stmt = $conn->prepare('INSERT INTO inventario (codigo,articulo,pvp,existencias,entrada,salida,stock) VALUES (?,?,?,?,?,?,?)');
	
	$stmt->bindParam(1,$codigo);
	$stmt->bindParam(2,$articulo);
	$stmt->bindParam(3,$pvp);
	$stmt->bindParam(4,$existencias);
	$stmt->bindParam(5,$entrada);
	$stmt->bindParam(6,$salida);
	$stmt->bindParam(7,$stock);
	
	//Recorremos los campos del fichero
	foreach ($xlsx->rows() as $fila => $campo){
		
		//Evitamos la primera columna, ya que tendrán las cabeceras.
		if($fila<=1){
			continue;
		}

		$codigo = $campo[0];
		$articulo = $campo[1];
		$pvp = $campo[2];
		$existencias = $campo[3];
		$entrada = $campo[4];
		$salida = $campo[5];
		$stock = $campo[6];
		$stmt->execute();
	}
}else{
	echo "El fichero no existe";
}
	
?>

Y asi es de fácil importar datos de un fichero excel a SQL mediante PHP. Para hacerlo más funcionar, se recomienda que se utilice un formulario para subir los ficheros al servidor. Os recomiendo el siguiente post: Subir varios ficheros a la vez

A %d blogueros les gusta esto: