Skip to content
Menu
Alejandro Soler
  • CódigoTecno
  • Sobre mi
  • EstudioPlaneta
  • Contactame
Alejandro Soler
7 noviembre, 20187 noviembre, 2018

Importar archivo xls a Mysql usando PHP

¿Cómo importar un archivo de Excel a una base MySQLi?

Muchas veces necesitamos de manera simple, volcar el contenido de un archivo Excel (.xls, xlsx) a una tabla Mysql.

Podemos hacerlo directamente con un formulario HTML con un poco de código PHP y la inclusión de una útil libreria, en realidad la que hace todo el trabajo es la librería, tampoco le vamos a sacar el mérito.

Importar .xls a Mysql con PHP

Les comparto lo que utilicé para rápidamente volcar miles de registros a una tabla en MySQLi.


<?php

//Formulario de importacion de archivo .xls a base de datos Mysql o Mysqli

//Conexion con la base de datos
//mysqli_connect("localhost",$usuario,$clave,$nombreBase);

$conn = mysqli_connect("localhost","root","","pintureria");

//incluir las librerias
//Bajalas desde :
//https://github.com/nuovo/spreadsheet-reader

require_once('vendor/php-excel-reader/excel_reader2.php');
require_once('vendor/SpreadsheetReader.php');

if (isset($_POST["import"]))
{

//filtrar solo los archivos que quiero importar, .xls, xlsx en este caso
// de la familia de Excel
$allowedFileType = ['application/vnd.ms-excel','text/xls','text/xlsx',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];

if(in_array($_FILES["file"]["type"],$allowedFileType)){


//carpeta temporal donde copio los archivos a importar
$targetPath = 'uploads/'.$_FILES['file']['name'];
move_uploaded_file($_FILES['file']['tmp_name'], $targetPath);

$Reader = new SpreadsheetReader($targetPath);

$sheetCount = count($Reader->sheets());
for($i=0;$i<$sheetCount;$i++)
{

$Reader->ChangeSheet($i);


//aqui viene la magia de hacer el volcado para cada registo
foreach ($Reader as $Row)
{

// obtengo el campo correspondiente
$clasificacion_id = "";
if(isset($Row[0])) {
$clasificacion_id = mysqli_real_escape_string($conn,$Row[0]);
}

$denominacion = "";
if(isset($Row[1])) {
$denominacion = mysqli_real_escape_string($conn,$Row[1]);
}

$domicilio = "";
if(isset($Row[2])) {
$domicilio = mysqli_real_escape_string($conn,$Row[2]);
}

$ciudad = "";
if(isset($Row[3])) {
$ciudad = mysqli_real_escape_string($conn,$Row[3]);
}

$provincia = "";
if(isset($Row[4])) {
$provincia = mysqli_real_escape_string($conn,$Row[4]);
}

$telefono = "";
if(isset($Row[5])) {
$telefono = mysqli_real_escape_string($conn,$Row[5]);
}


//si tengo datos en el registo, procedo a la inserción de la tabla
// aqui solo verifico los 2 primeros campos, puedo obviar o verificar mas condiciones
if (!empty($clasificacion_id) || !empty($denominacion)) {
$query = "INSERT INTO distribuidores (clasificacion_id, denominacion, domicilio, ciudad, provincia, telefono) values('".$clasificacion_id."',
'".$denominacion."','".$domicilio."','".$ciudad."','".$provincia."','".$telefono."')";

$result = mysqli_query($conn, $query);

if (! empty($result)) {
$type = "success";
$message = "El archivo con formato Excel ha sido importado correctamente a la base de datos.";
} else {
$type = "error";
$message = "Ups! Hubo un problema immportando el archivo con formato Excel.";
}
}
}


}
}
else
{
$type = "error";
$message = "Intentó subir un Tipo de archivo no valido.";
}
}
?>

<!DOCTYPE html>
<html>
<head><title>Importar archivo Excel a una base de datos Mysql usando PHP</title>
<link rel='stylesheet' href='estilo.css' type='text/css' media='all' />
</head>

<body>
<h2>Importar archivo Excel a una base de datos Mysql usando PHP</h2>

<div class="outer-container">
<form action="" method="post"
name="frmExcelImport" id="frmExcelImport" enctype="multipart/form-data">
<div>
<label>Seleccionar archivo a importar</label> <input type="file" name="file"
id="file" accept=".xls,.xlsx">
<button type="submit" id="submit" name="import"
class="btn-submit">Importar</button>

</div>

</form>

</div>
<div id="response" class="<?php if(!empty($type)) { echo $type . " display-block"; } ?>"><?php if(!empty($message)) { echo $message; } ?></div>


<?php

//hago un listado para mostrar datos de la tabla
//ademas me sirve para verificar que la conexión con la base haya sido exitosa
//en caso que tenga datos la tabla los mostrara aqui.

$sqlSelect = "SELECT * FROM distribuidores";
$result = mysqli_query($conn, $sqlSelect);

if (mysqli_num_rows($result) > 0)
{
?>

<table class='tutorial-table'>
<thead>
<tr>
<th>Clasificacion</th>
<th>Denominacion</th>
<th>Domicilio</th>
<th>Ciudad</th>
<th>Provincia</th>
<th>Telefono</th>

</tr>
</thead>
<?php

// puedo agregar todos las columnas que necesite
while ($row = mysqli_fetch_array($result)) {
?>
<tbody>
<tr>
<td><?php echo $row['clasificacion_id']; ?></td>
<td><?php echo $row['denominacion']; ?></td>
<td><?php echo $row['domicilio']; ?></td>
<td><?php echo $row['ciudad']; ?></td>
<td><?php echo $row['provincia']; ?></td>
<td><?php echo $row['telefono']; ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
<?php
}
?>

</body>
</html>

 

Descargar el código completo desde aquí, (incluida la librería): importar_excel_a_mysql_usando_php

Ahora si solo querés la libreria Spreed Sheet Reader la podés descargar desde Github

 

Cualquier duda que tengas, escribime, contactame y trataremos de hacerlo funcionar.

 

Saludos.

 

@alejus

 

facebookShare on Facebook
TwitterTweet
FollowFollow us

1 thought on “Importar archivo xls a Mysql usando PHP”

  1. JC dice:
    13 marzo, 2021 a las 3:00 pm

    Hola alejus,
    El ejemplo funciona perfecto, pero si el excel a importar tiene 50 colunas y 7000 filas, tarda muchísimo y cuando lleva 2000 filas da error del nginx. ¿Alguna idea?

    Responder

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Seguime :)

Facebook
Facebook
Twitter
Visit Us
Follow Me
YouTube
LinkedIn
Instagram

Suscríbete a nuestro Boletín

Buscar

Páginas

  • Contactame
  • ¿Quién es Alejandro Soler ?

Categorías

  • Código Tecno
  • Educación
  • Eventos
  • GNU/Linux
  • Opinión
  • Personal
  • Programación
  • Reflexiones
  • Seguridad
  • Sentidos de Vida
  • Sin categoría
  • Tips / Nota Mental
  • Trucos
  • Unos Segundos

Entradas recientes

  • Cómo salir con éxito de una entrevista laboral rápida – CodigoTecno
  • Consejos para estar al día en el mercado tecnológico
  • Herramientas de IA para desarrolladores que debes conocer
  • Seguridad Informática para emprendimientos digitales
  • No te quedes afuera de la Inteligencia Artificial

Por aquí:

apache applepodcast aprende aprender artificial chatGPT codeigniter codigotecno consejos correr Debian desarrollador desarrollo desarrollo web descargar develop developer diseñador facebook frameworks ia inteligencia ivoox javascript laravel Linux nodejs php podastespañol podcast podcaster podcastespañol ppa programación programar redes reflexiones sociales spotify tecnología tiempo Trucos Ubuntu unossegundos web
©2023 Alejandro Soler | Powered by WordPress and Superb Themes!