Cómo importar un archivo Excel en una base de datos MySQL con PHP

Realizar backups y restaurar bases de datos son dos de las acciones más importantes a la hora de mantener un software. Llevar a cabo backups periódicamente es un must en cualquier proyecto. En el caso de que tengamos un error grave que afecte al sistema, un buen backup puede salvarte de muchísimos problemas. El hecho de exportar tu base de datos en un fichero puede ser utilizado para después restaurarla donde quieras. Por lo tanto siempre es buena idea verificar si nuestra copia de seguridad es correcta realizando una restauración de prueba.

Por norma general, el archivo resultante de llevar a cabo un backup suele ser en formato SQL, CSV o Excel. Los gestores de base de datos más populares de hoy en día también cuentan con una opción para restaurar bases de datos en dichos formatos. Pero en este tutorial te mostraremos cómo importar una base de datos mediante un fichero Excel.

Para ello nos serviremos de un formulario HTML mediante el cual, el usuario podrá subir su propio fichero Excel. Una vez subido el archivo, parsearemos su contenido y lo insertaremos en la base de datos. En este caso utilizaré la librería PHPSpreadSheet para leer el fichero Excel. Una vez dicho esto, vamos a ver cómo importar un archivo Excel desde nuestra propia aplicación en PHP.

Escoger el fichero Excel para importar la información

Utilizaremos este formulario en HTML, el cual cuenta con un campo input, para que el usuario pueda subir su fichero Excel. Cuando el visitante envíe el formulario, el fichero Excel se enviará al PHP que parseará sus datos. Para validar la extensión del fichero y que no nos la cuelen con otro tipo de archivos, utilizaremos el atributo accept.

Como podrás ver, este código también cuenta con el HTML necesario para mostrar el mensaje que nos devolverá el fichero PHP. El mensaje mostrado dependerá de la respuesta de dicho fichero.

<h2>Import Excel File into MySQL Database using PHP</h2>
    
    <div class="outer-container">
        <form action="" method="post"
            name="frmExcelImport" id="frmExcelImport" enctype="multipart/form-data">
            <div>
                <label>Choose Excel
                    File</label> <input type="file" name="file"
                    id="file" accept=".xls,.xlsx">
                <button type="submit" id="submit" name="import"
                    class="btn-submit">Import</button>
        
            </div>
        
        </form>
        
    </div>
    <div id="response" class="<?php if(!empty($type)) { echo $type . " display-block"; } ?>"><?php if(!empty($message)) { echo $message; } ?></div>
    
         
<?php
    $sqlSelect = "SELECT * FROM tbl_info";
    $result = mysqli_query($conn, $sqlSelect);

if (mysqli_num_rows($result) > 0)
{
?>
        
    <table class='tutorial-table'>
        <thead>
            <tr>
                <th>Name</th>
                <th>Description</th>

            </tr>
        </thead>
<?php
    while ($row = mysqli_fetch_array($result)) {
?>                  
        <tbody>
        <tr>
            <td><?php  echo $row['name']; ?></td>
            <td><?php  echo $row['description']; ?></td>
        </tr>
<?php
    }
?>
        </tbody>
    </table>
<?php 
} 
?>

Importar los datos del Excel a nuestra base de datos

Descarga la librería PHPSpreadSheet en la carpeta vendor de tu aplicación. Incluye la ruta de la librería para acceder a las funciones de PHPSpreadSheet y leer los datos del Excel en un array.

En este código PHP, lo primero que hago es verificar una vez más si el archivo que el usuario nos ha enviado es del formato que deseamos. Una vez validada la extensión, parsearemos los datos del fichero mediante las funciones de PHPSpreadSheet. Simplemente lo que haremos es recorrer cada una de las filas del fichero Excel e introducirlas en varias variables para, después, confeccionar la query para introducir la información en la base de datos.

<?php
$conn = mysqli_connect("localhost","root","test","phpsamples");
require_once('vendor/php-excel-reader/excel_reader2.php');
require_once('vendor/SpreadsheetReader.php');

if (isset($_POST["import"]))
{
       
  $allowedFileType = ['application/vnd.ms-excel','text/xls','text/xlsx','application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];
  
  if(in_array($_FILES["file"]["type"],$allowedFileType)){

        $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);
            
            foreach ($Reader as $Row)
            {
          
                $name = "";
                if(isset($Row[0])) {
                    $name = mysqli_real_escape_string($conn,$Row[0]);
                }
                
                $description = "";
                if(isset($Row[1])) {
                    $description = mysqli_real_escape_string($conn,$Row[1]);
                }
                
                if (!empty($name) || !empty($description)) {
                    $query = "insert into tbl_info(name,description) values('".$name."','".$description."')";
                    $result = mysqli_query($conn, $query);
                
                    if (! empty($result)) {
                        $type = "success";
                        $message = "Excel Data Imported into the Database";
                    } else {
                        $type = "error";
                        $message = "Problem in Importing Excel Data";
                    }
                }
             }
        
         }
  }
  else
  { 
        $type = "error";
        $message = "Invalid File Type. Upload Excel File.";
  }
}
?>

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP