Excel es un programa muy popular para contener datos y muchos programas importan y exportan datos con formato Excel.
En este articulo les voy a enseñar como importar datos de un archivo Excel a una base de datos Mysql con PHP y PHPExcel.
Este articulo se basa del articulo de Importar datos de un CSV a una base de datos Mysql con PHP.
Formato / Orden de los datos
El formato de datos para este ejemplo debe ser el siguiente [Rut/Rfc, Nombre, Apellidos, Direccion, Email, Telefono].
Aquí les muestro como se ve el archivo excel de prueba.
El tipo de archivo debe ser XlSX si están usando MS Excel ya les da el archivo, pero si están usando Open Office o Google Docs deben exportar el archivo al formato .xlsx.
Base de datos
La base de datos es la que uso en todos mis ejemplos, una base de datos de contactos:
create database importex1; use importex1; create table person( id int not null auto_increment primary key, no varchar(255) , name varchar(255) not null, lastname varchar(50) not null, address1 varchar(50), address2 varchar(50), phone1 varchar(50), phone2 varchar(50), email1 varchar(50), email2 varchar(50), created_at datetime not null );
Conexión a la base de datos
La conexión a la base de datos la hacemos en PHP y se las incluyo en el archivo database.php
// parametros: host,user,password,database $con = new mysqli("localhost","root","","importex1");
Formulario
El siguiente código es para el formulario html que se va a usar para seleccionar el archivo usando un campo file.
<form method="post" action="import.php" enctype="multipart/form-data" role="form"> <div> <label class="col-lg-2 control-label">Archivo (.xlsx)*</label> <input type="file" name="name" id="name" placeholder="Archivo (.xlsx)"> <br><br> <button type="submit" class="btn btn-primary">Importar Datos</button> </div> </form>
Al seleccionar el archivo y hacer submit al formulario nos dirigiremos al archivo import.php, en este archivo se procesan los datos.
Leer archivo .xlsx e importar los datos
El siguiente codigo sirve para leer el archivo excel una vez subido al servidor, recorremos el archivo con la librería PHPExcel, creamos la consulta SQL y posteriormente ejecutamos el codigo sql para insertar los datos a la base de datos.
include "database.php"; include "class.upload.php"; if(isset($_FILES["name"])){ $up = new Upload($_FILES["name"]); if($up->uploaded){ $up->Process("./uploads/"); if($up->processed){ /// leer el archivo excel require_once 'PHPExcel/Classes/PHPExcel.php'; $archivo = "uploads/".$up->file_dst_name; $inputFileType = PHPExcel_IOFactory::identify($archivo); $objReader = PHPExcel_IOFactory::createReader($inputFileType); $objPHPExcel = $objReader->load($archivo); $sheet = $objPHPExcel->getSheet(0); $highestRow = $sheet->getHighestRow(); $highestColumn = $sheet->getHighestColumn(); for ($row = 2; $row <= $highestRow; $row++){ $x_no = $sheet->getCell("A".$row)->getValue(); $x_name = $sheet->getCell("B".$row)->getValue(); $x_lastname = $sheet->getCell("C".$row)->getValue(); $x_address1 = $sheet->getCell("D".$row)->getValue(); $x_email = $sheet->getCell("E".$row)->getValue(); $x_phone1 = $sheet->getCell("F".$row)->getValue(); $sql = "insert into person (no, name, lastname, address1, email1, phone1, created_at) value "; $sql .= " (\"$x_no\",\"$x_name\",\"$x_lastname\",\"$x_address1\",\"$x_email\",\"$x_phone1\", NOW())"; $con->query($sql); } unlink($archivo); } } }
Las primeras 2 lineas agregamos las librerías que usaremos, depues usamos la libreria class.upload.php para subir el archivo excel al servidor.
En la linea 10 incluimos la librería PHPExcel con la cual leeremos el archivo y tipo de archivo.
En la linea 12 abrimos/identificamos el archivo.
En la linea 13 creamos un objeto tipo Reader y en la linea 14 hacemos uso del reader para leer el archivom obtenemos el objecto PHPExcel en la variable $objPHPExcel este objeto losaremos aparti de aqui para referirnos al documento.
En la linea 15 seleccionamos la hoja de excel, en caso de que en archivo tenga mas de 1 hoja, las hojas se manejan con un indice el cual empieza desde 0 hasta n-1, donde n es la cantidad de hojas del archivo.
En la linea 16 obtenemos la ultima fila.
En la linea 17 obtenemos la ultima columna.
De la linea 18 a la 28 hacemos un ciclo, desde la fila 2 hasta la ultima fila, empezamos con la fila 2 por que es la fila donde empiezan los datos en el archivo excel de ejemplo, si tus datos empiezan en otra linea debes especificarlo en el for donde dice $row = 2.
En la linea 19 vamos a obtener en valor de cada campo o columna para el primer campo de la base de datos, con la función getCell(“A2”), donde A2 es la fila 2 y la columna es A, en el ejemplo usamos “A”.$row , donde $row es la variable del ciclo for que incrementa en cada ciclo.
Si su primer campo no es la columna A aqui la pueden cambiar y asi sucesivamente en el resto de campos.
En la linea 20 a la 24 seguimos los mismos pasos para guardar los valores de los siguientes campos, nombre en la columna B, apellido en la columna C, domicilio en la columna D, email en la columna E y teléfono en la columna F.
En la linea 25 y 26 creamos una consulta SQL para insertar datos en la base de datos, aqui usaremos los campos de la base de datos y las variables con los valores de los campos que obtuvimos previamente.
En la linea 27 ejecutamos la consulta directamente en la base de datos.
Descargar
A continuación te dejo un enlace para descargar los archivos de ejemplo:
Incluye: archivos PHP (index.php, database.php, import.php), archivo schema.sql con la base de datos, archivo excel de ejemplo, librerías class.upload.php y PHPExcel.
Link: https://drive.google.com/file/d/1lqcjzSwRU4Ks7dpxow2gSUrqCjvGsLKH/view
Conclusión
Puedes personalizar el código fuente para adaptarlos a cualquier archivo excel, puedes agregar quitar campos, columnas, etc.
Que tal te pareció este ejemplo? Envíanos tus comentarios.