Librería PHPSpreadSheet

Importar archivo Excel a MySQL con PHPSpreadsheet

PHPSpreadsheet: Importar de Excel a MySQL

Importar archivo Excel a MySQL. En el presente artículo vamos a implementar un script usando una librería muy potente con base de actualización periódica lo que nos garantiza una amplia documentación.

Las copias de seguridad y restauración de bases de datos o la importación de registros en masa suele ser la parte más importante y es una herramienta imprescindible de cada sistema web profesional.

En caso de desastre de seguridad que puede colapsar su sistema. Sin embargo, en una situación tan desafortunada, será una gran salvación si tienes un respaldo en cualquier formato de archivo.

Recordemos que los archivos de copia de seguridad pueden estar en cualquier formato. Es posible que vea que muchos de los clientes de base de datos admiten archivos de formato SQL, Excel o CSV para importar datos externos hacia la base de datos.

Publicaciones relacionadas

Importar archivo Excel a MySQL con PHPSpreadsheet

Vamos a crear una base de datos para importar datos de Excel usando el presente ejemplo.

Restaurar la copia de seguridad de Excel en una base de datos a través de la programación nos ahorrará tiempo. Por lo tanto, vamos a implementar una restauración rápida mediante la importación de datos masivos de archivos de Excel.

Si está buscando el ejemplo de exportación, puede visitar mis datos de exportación en formato EXCEL.

Salida: Importación de Excel y listado de datos

Vista en la tabla MySQL

Resultados en MySQL con los registros importados
Resultados en MySQL con los registros importados

¿Cómo funciona el presente ejemplo de importación de Excel?

Nos apoyaremos en un formulario para cargar el fichero Excel. Usaremos una plantilla de Excel de ejemplo con este recurso en la ZIP descargable que dejare el final del artículo.

Con un archivo válido y sus campos definidos, el envío del formulario HTML llamará a PHP para procesar el fichero de Excel.

En PHP, la biblioteca PHPSpreadSheet se utiliza para leer los datos del archivo de Excel y convertirlos en una matriz.

Al iterar los datos de la matriz, el código se ejecutará e insertara fila por fila a la base de datos.

Estructura de archivos

A continuación, mostrare la estructura de archivos del ejemplo de importación de Excel. La carpeta del script tiene la biblioteca PHPSpreadsheet y depende de ella.

En la carpeta «Ejemplo» existe un ejemplo de archivo de Excel para probar la operación de importación.

El fichero b_importar_excel.sql tiene el script para crear la base de datos de destino.

Script de base de datos

Es necesario ejecutar el siguiente script SQL y/o importar la tabla en su gestor de base de datos. Además, configure los detalles de la base de datos en DBClass.php para que este ejemplo funcione.
CREATE TABLE `tbl_productos` (
`id` int(11) NOT NULL,
`producto` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL,
`descripcion` varchar(250) COLLATE utf8mb4_unicode_ci NOT NULL,
`fecha` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Indices de la tabla `tbl_productos`
--
ALTER TABLE `tbl_productos`
ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT de la tabla `tbl_productos`
--
ALTER TABLE `tbl_productos`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

Creación de la interfaz de usuario con formulario

Este formulario HTML5 posee la opción de carga de archivos y se utiliza para elegir el archivo de Excel en el explorador de Windows. Por lo tanto, al enviar este formulario, el archivo de Excel se enviará al PHP para analizar el origen de datos.
Esta opción de carga de archivos solo permite que los archivos sean de tipo Excel, usando el atributo «accept«.
Este código también muestra la respuesta para mostrar un mensaje devuelto desde PHP.

Los mensajes se muestra en función del tipo de respuesta enviada desde PHP después de la importación de Excel.

<main>
<div class="container py-4">
<header class="pb-3 mb-4 border-bottom"> <a href="/" class="d-flex align-items-center text-dark text-decoration-none"> <span class="fs-4">Importar archivo Excel a MySQL con PHPSpreadsheet</span> </a> </header>
<div class="row align-items-md-stretch">
<div class="col-md-6">
<form class="row g-3" action="" method="post" name="frmExcelImport" id="frmExcelImport" enctype="multipart/form-data">
<div class="col-md-9">
<input class="form-control form-control-sm" id="file" name="file" type="file" accept=".xls,.xlsx">
</div>
<div class="col-md-3">
<button type="submit" id="submit" name="importar" class="btn btn-primary btn-sm mb-3">Importar</button>
</div>
</form>
</div>
</div>
<div class="row align-items-md-stretch">
<div class="col-md-6">
<div id="respuesta" class="alert alert-<?php if(!empty($type)) { echo $type . " display-block"; } ?>">
<?php if(!empty($message)) { echo $message; } ?>
</div>
</div>
</div>
<div class="row align-items-md-stretch">
<div class="col-md-12">
<?php
$sqlSelect = "SELECT * FROM tbl_productos";
$result = $db->select($sqlSelect);
if (! empty($result)) {
?>
<table class="table table-sm table-striped">
<thead>
<tr>
<th scope="col">Producto</th>
<th scope="col">Descripción</th>
</tr>
</thead>
<tbody>
<?php
foreach ($result as $row) {
?>
<tr>
<td scope="row"><?php echo $row['producto']; ?></td>
<td><?php echo $row['descripcion']; ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
<?php
}
?>
</div>
</div>

<!--End contenidos-->
<footer class="pt-3 mt-4 text-muted border-top"> &copy; <?=date("Y");?> </footer>
</div>
</main>

Analizar datos de Excel usando PHPSpreadsheet

Con la validación correcta, el análisis de archivos de Excel lee y convierte los datos en una matriz. Cada índice de matriz tiene una matriz de datos de fila. Después de leer los datos de fila no vacíos, ejecuto la inserción de la base de datos y muestra la respuesta encima del formulario ya sea verdadera o falso.

<?php
use Baulphp\DBClass;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;

require_once 'DBClass.php';
$db = new DBClass();
$conexion = $db->getConnection();
require_once ('./vendor/autoload.php');

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

$allowedFileType = [
'application/vnd.ms-excel',
'text/xls',
'text/xlsx',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
];

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

$targetPath = 'subidas/' . $_FILES['file']['name'];
move_uploaded_file($_FILES['file']['tmp_name'], $targetPath);

$Reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();

$spreadSheet = $Reader->load($targetPath);
$excelSheet = $spreadSheet->getActiveSheet();
$spreadSheetAry = $excelSheet->toArray();
$sheetCount = count($spreadSheetAry);

for ($i = 0; $i <= $sheetCount; $i ++) {
$producto = "";
if (isset($spreadSheetAry[$i][0])) {
$producto = mysqli_real_escape_string($conexion, $spreadSheetAry[$i][0]);
}
$descripcion = "";
if (isset($spreadSheetAry[$i][1])) {
$descripcion = mysqli_real_escape_string($conexion, $spreadSheetAry[$i][1]);
}

if (! empty($producto) || ! empty($descripcion)) {
$query = "insert into tbl_productos(producto,descripcion) values(?,?)";
$paramType = "ss";
$paramArray = array(
$producto,
$descripcion
);
$insertId = $db->insert($query, $paramType, $paramArray);

if (! empty($insertId)) {
$type = "success";
$message = "Datos de Excel importados a la base de datos";
} else {
$type = "danger";
$message = "Problema al importar datos de Excel";
}
}
}
} else {
$type = "danger";
$message = "Tipo de archivo invalido. Cargar archivo de Excel.";
}
}
?>

Instalación del script de importación a MySQL

Use Composer para instalar PHPSpreadsheet en su proyecto:

composer require phpoffice/phpspreadsheet

Salida en la consola con la descarga exitosa de la libreria PhpSpreadsheet

Instalar composer en carpeta

Nota: Al ejecutar composer se creara una carpeta llamada «vendor». La documentacion de la libreria aquí 

Instalacón de la librería
Instalacón de la librería

Esta captura de pantalla muestra la salida mostrando la lista de filas importadas de la base de datos.

Generar Excel con PhpSpreadsheet y PHP & MySQL

Conclusión

La implementación de esta herramienta para nuestros sistemas es imprescindible y en este artículo hemos aprendido como implementarlo.

Hemos usado la librería PhpSpreadsheet que en la actualidad es la más recomendada para estos trabajos.
Además, hemos usado el framework BootStrap5 para darle estilos al ejemplo

Espero que esta breve explicación les ayude a implementar esta estupenda herramienta en vuestros proyectos.

Descarga del Script

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

Un comentario

  1. Hola buenas un favor cuando intento añadir datos de tipo fecha no me inserta bien por ejemplo 01/03/2022 guenda de esta manera 44621 , pora alguna sulucion.

Deja una respuesta

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

Botón volver arriba