Lenguaje PHP

Importar datos de Excel a MySQL con php

Importar datos de Excel a MySQL con php. Cuando realizamos algún sistema web debemos importar archivos Excel a Mysql en sus respectivos registros. Hace algunos meses, por motivo de trabajo estuve desarrollando un sistema para una institución educativa donde sus notas eran almacenadas en ficheros de Excel (Misnotas.xlsx), observé el obstáculo de almacenar cientos de registros desde Excel a una base de datos MySQL, en su respectiva tabla.

Analizando la cantidad de registros que superaba los mil registros, descarté la opción de hacerlo en forma manual y tuve que buscar otra alternativa que me ahorrara tiempo para agilizar el proceso.

Por mi mente pasaron varias alternativas, algunas en formato CSV o XLS, analicé varias las soluciones que pude observar, unas más fáciles que otras, pero la idea era trabajar con el formato actual del Excel sin tener que hacer ninguna modificación, me refiero a la extensión XLSX. Ahora en este pequeño articulo les brindo la solución que le di a este sistema.

Importar datos de Excel a MySQL con php
Importar datos de Excel a MySQL con php

Importar datos de Excel a MySQL con php

¿Cómo importar a MySQL desde Excel?

Como les comentaba había varias alternativas, unas en extensión CSV y luego importarlo a MySQL. Luego de comprobar la eficacia me incline por esta solución.

Quizá le interese los siguientes artículos.

[pt_view id=”fc09d98ps2″]

Recursos necesarios para la solución:

  1. El gestor PHPMyAdmin para crear la tabla y base de datos.
  2. Un archivo de Excel con datos, ordenados por columna y con una cabecera.
  3. EL lenguaje PHP como interprete para la vinculación con MySQL.

Ya tenemos casi todo, vamos a describir los pasos

A continuación detallaremos una serie de pasos para conseguir el objetivo.

1. Implementando formulario

El formulario HTML encargado de recoger la informacion del fichero de excel.

Guardar excel en Mysql
Guardar excel en Mysql
<div class="container">
<h2>Cargar e importar archivo excel a MySQL</h2>
<form name="importa" method="post" action="" enctype="multipart/form-data" >
  <div class="col-xs-4">
    <div class="form-group">
      <input type="file" class="filestyle" data-buttonText="Seleccione archivo" name="excel">
    </div>
  </div>
  <div class="col-xs-2">
    <input class="btn btn-default btn-file" type='submit' name='enviar'  value="Importar"  />
  </div>
  <input type="hidden" value="upload" name="action" />
  <input type="hidden" value="usuarios" name="mod">
  <input type="hidden" value="masiva" name="acc">
</form>
</div>

2. Procesamos el fichero Excel

Las siguientes lineas de código será el encargado de recibir el fichero Excel recogido desde el formulario HTML

//cargamos el fichero
$archivo = $_FILES['excel']['name'];
$tipo = $_FILES['excel']['type'];
$destino = "cop_".$archivo;//Le agregamos un prefijo para identificarlo el archivo cargado
if (copy($_FILES['excel']['tmp_name'],$destino)) echo "Archivo Cargado Con Éxito";
else echo "Error Al Cargar el Archivo";
        
if (file_exists ("cop_".$archivo)){ 
/** Llamamos las clases necesarias PHPEcel */
require_once('Classes/PHPExcel.php');
require_once('Classes/PHPExcel/Reader/Excel2007.php');                  
// Cargando la hoja de excel
$objReader = new PHPExcel_Reader_Excel2007();
$objPHPExcel = $objReader->load("cop_".$archivo);
$objFecha = new PHPExcel_Shared_Date();       
// Asignamon la hoja de excel activa
$objPHPExcel->setActiveSheetIndex(0);

3. Hacemos la conexión con la base de datos

El lenguaje PHP es muy dinámico y por ende se puede conectar con MySQL con gran facilidad. Por lo tanto, aquí les mostrare el código de conexión.

// Importante - conexión con la base de datos 
$cn = mysql_connect ("localhost","root","") or die ("ERROR EN LA CONEXION CON LA BD");
$db = mysql_select_db ("php_excel",$cn) or die ("ERROR AL CONECTAR A LA BD");

4. Creación de la tabla Mysql

Para que nuestro ejemplo funcione tenemos que tener una tabla con sus respectivas columnas definidas para albergar la información del fichero Excel.

-- Estructura de tabla para la tabla `excel`

CREATE TABLE `excel` (
  `id` int(11) NOT NULL,
  `nombres` varchar(255) NOT NULL,
  `apellidos` varchar(255) NOT NULL,
  `genero` varchar(255) NOT NULL,
  `carrera` varchar(150) NOT NULL,
  `edad` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `activo` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT;


INSERT INTO `excel` (`id`, `nombres`, `apellidos`, `genero`, `carrera`, `edad`, `email`, `activo`) VALUES
(1, 'Juan Carlos', 'Flores', 'Masculino', 'Computacion', '21', 'juan@micorreo.com', 1),
(2, 'Maria', 'Ugarte', 'Femenino', 'Contabilidad', '19', 'maria@micorreo.com', 1),
(3, 'Vanessa', 'Torres', 'Femenino', 'Computacion', '17', 'Vanessa@micorreo.com', 1),
(4, 'Juan Carlos', 'Flores', 'Masculino', 'Computacion', '21', 'juan@micorreo.com', 1),
(5, 'Maria', 'Ugarte', 'Femenino', 'Contabilidad', '19', 'maria@micorreo.com', 1),
(6, 'Vanessa', 'Torres', 'Femenino', 'Computacion', '17', 'Vanessa@micorreo.com', 1);

ALTER TABLE `excel`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `excel`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;

5. Insertando registros a la base de datos

Este ejemplo se basa en la inserción de un fichero de Excel a la base de datos. Sin embargo, estos ficheros pueden contener cientos de registros que pueden ser, lista de alumnos, clientes, productos, etc. Para poder insertar nos apoyaremos en el ciclo foreach.

foreach($_DATOS_EXCEL as $campo => $valor){
$sql = "INSERT INTO excel  (nombres,apellidos,genero,carrera,edad,email,activo)  VALUES ('";
foreach ($valor as $campo2 => $valor2){
$campo2 == "activo" ? $sql.= $valor2."');" : $sql.= $valor2."','";
}

$result = mysql_query($sql);
if (!$result){ echo"Error al insertar registro ".$campo;$errores+=1;}
}   
/////////////////////////////////////////////////////////////////////////   
echo"<hr> <div class='col-xs-12'>
        <div class='form-group'>";
          echo "<strong><center>ARCHIVO IMPORTADO CON EXITO, EN TOTAL $campo REGISTROS Y $errores ERRORES</center></strong>";
echo"</div>
</div>  ";

6. Mostrando resultados insertados

Datos guardados en Mysql con Excel y PHP
Datos guardados en Mysql con Excel y PHP
if (isset($action)== "upload"){
echo '<table border="1" class="table">';
    echo '<thead>';
        echo '<tr>
            <th>Nombres</th> 
            <th>Apellidos</th>
            <th>Genero</th>
            <th>Edad</th>
            <th>Carrera</th>
            <th>E-Mail</th>
            </tr> 
        </thead> 
        <tbody> ';

$count=0;
foreach ($objPHPExcel->setActiveSheetIndex(0)->getRowIterator() as $row) {
    $count++;
    $cellIterator = $row->getCellIterator();
    $cellIterator->setIterateOnlyExistingCells(false);
    echo '<tr>';
    foreach ($cellIterator as $cell) {
        if (!is_null($cell)) {
            $value = $cell->getCalculatedValue();
            echo '<td>".$value."</td>';
           
        }
    }
    echo '</tr>';
}?>
  </tbody>
  </table>
<?php }?>

Mostramos los archivos completos: Importar datos de Excel a MySQL con php

Siguiendo con el artículo, mostraremos los elementos de nuestro sistema de importación

Index.php

<?php include("header.php");?>
<!-- FORMULARIO PARA ESTE EJERCICIO -->
<div class="container">
<h2>Cargar e importar archivo excel a MySQL</h2>
<form name="importa" method="post" action="" enctype="multipart/form-data" >
  <div class="col-xs-4">
    <div class="form-group">
      <input type="file" class="filestyle" data-buttonText="Seleccione archivo" name="excel">
    </div>
  </div>
  <div class="col-xs-2">
    <input class="btn btn-default btn-file" type='submit' name='enviar'  value="Importar"  />
  </div>
  <input type="hidden" value="upload" name="action" />
  <input type="hidden" value="usuarios" name="mod">
  <input type="hidden" value="masiva" name="acc">
</form>

<!-- PROCESO DE CARGA Y PROCESAMIENTO DEL EXCEL-->
<?php 
extract($_POST);
if (isset($_POST['action'])) {
$action=$_POST['action'];
}

if (isset($action)== "upload"){
//cargamos el fichero
$archivo = $_FILES['excel']['name'];
$tipo = $_FILES['excel']['type'];
$destino = "cop_".$archivo;//Le agregamos un prefijo para identificarlo el archivo cargado
if (copy($_FILES['excel']['tmp_name'],$destino)) echo "Archivo Cargado Con Éxito";
else echo "Error Al Cargar el Archivo";
        
if (file_exists ("cop_".$archivo)){ 
/** Llamamos las clases necesarias PHPEcel */
require_once('Classes/PHPExcel.php');
require_once('Classes/PHPExcel/Reader/Excel2007.php');                  
// Cargando la hoja de excel
$objReader = new PHPExcel_Reader_Excel2007();
$objPHPExcel = $objReader->load("cop_".$archivo);
$objFecha = new PHPExcel_Shared_Date();       
// Asignamon la hoja de excel activa
$objPHPExcel->setActiveSheetIndex(0);

// Importante - conexión con la base de datos 
$cn = mysql_connect ("localhost","root","") or die ("ERROR EN LA CONEXION CON LA BD");
$db = mysql_select_db ("php_excel",$cn) or die ("ERROR AL CONECTAR A LA BD");

// Rellenamos el arreglo con los datos  del archivo xlsx que ha sido subido

$columnas = $objPHPExcel->setActiveSheetIndex(0)->getHighestColumn();
$filas = $objPHPExcel->setActiveSheetIndex(0)->getHighestRow();

//Creamos un array con todos los datos del Excel importado
for ($i=2;$i<=$filas;$i++){
                        $_DATOS_EXCEL[$i]['nombres'] = $objPHPExcel->getActiveSheet()->getCell('A'.$i)->getCalculatedValue();
                        $_DATOS_EXCEL[$i]['apellidos'] = $objPHPExcel->getActiveSheet()->getCell('B'.$i)->getCalculatedValue();
                        $_DATOS_EXCEL[$i]['genero']= $objPHPExcel->getActiveSheet()->getCell('C'.$i)->getCalculatedValue();
                        $_DATOS_EXCEL[$i]['carrera']= $objPHPExcel->getActiveSheet()->getCell('D'.$i)->getCalculatedValue();
                        $_DATOS_EXCEL[$i]['edad'] = $objPHPExcel->getActiveSheet()->getCell('E'.$i)->getCalculatedValue();
                        $_DATOS_EXCEL[$i]['email'] = $objPHPExcel->getActiveSheet()->getCell('F'.$i)->getCalculatedValue();
                        $_DATOS_EXCEL[$i]['activo'] = 1;
                    }       
                    $errores=0;


foreach($_DATOS_EXCEL as $campo => $valor){
                        $sql = "INSERT INTO excel  (nombres,apellidos,genero,carrera,edad,email,activo)  VALUES ('";
                        foreach ($valor as $campo2 => $valor2){
                            $campo2 == "activo" ? $sql.= $valor2."');" : $sql.= $valor2."','";
                        }

                        $result = mysql_query($sql);
                        if (!$result){ echo "Error al insertar registro ".$campo;$errores+=1;}
                    }   
                    /////////////////////////////////////////////////////////////////////////   
echo "<hr> <div class='col-xs-12'>
        <div class='form-group'>
          <strong><center>ARCHIVO IMPORTADO CON EXITO, EN TOTAL $campo REGISTROS Y $errores ERRORES</center></strong>
</div>
</div>  ";
                            //Borramos el archivo que esta en el servidor con el prefijo cop_
                    unlink($destino);
                    
                }
                    //si por algun motivo no cargo el archivo cop_ 
                else{
                    echo "Primero debes cargar el archivo con extencion .xlsx";
                }
            }
        ?>
<?php 
            if (isset($action)) {
$filas = $objPHPExcel->setActiveSheetIndex(0)->getHighestRow();
                }
            if (isset($filas)) {
$columnas = $objPHPExcel->setActiveSheetIndex(0)->getHighestColumn();
                }
            if (isset($filas)) {
$filas = $objPHPExcel->setActiveSheetIndex(0)->getHighestRow();
                }


if (isset($action)== "upload"){
echo '<table border="1" class="table">';
    echo '<thead>
        <tr>
            <th>Nombres</th> 
            <th>Apellidos</th>
            <th>Genero</th>
            <th>Edad</th>
            <th>Carrera</th>
            <th>E-Mail</th>
            </tr> 
        </thead> 
        <tbody> ';

$count=0;
foreach ($objPHPExcel->setActiveSheetIndex(0)->getRowIterator() as $row) {
    $count++;
    $cellIterator = $row->getCellIterator();
    $cellIterator->setIterateOnlyExistingCells(false);
    echo '<tr>';
    foreach ($cellIterator as $cell) {
        if (!is_null($cell)) {
            $value = $cell->getCalculatedValue();
            echo '<td>".$value."</td>';
           
        }
    }
    echo '</tr>';
}
  echo '</tbody></table>';
}?>
</div>
<?php include ("footer.php");
?>

header.php

<!DOCTYPE html>
<html>
<head>
    <title>Sistema Guardar Excel en MySQL</title>
    <!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" >
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" >
<link rel="stylesheet" href="css/styles.css" >

 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
 <script type="text/javascript" src="js/filestyle.min.js"> </script>

</head>
<body>

<div class="container">
    <div class="row">
        <div style="border: 1px solid #ccc; height: 42px; background:#f1f3f5 ">
        <nav class="dropdownmenu">
  <ul>
    <li><a href="index.php">Inicio</a></li>
    <li><a href="Mantenimiento.php">Ver Registros</a></li>
    <li></li>
    <li></li>
  </ul>

</nav></div>

Mantenimiento.php

<?php

require_once('connect.php');
$ReadSql = "SELECT * FROM `excel`";
$res = mysqli_query($connection, $ReadSql);
include("header.php");
?>
<div style="width: 100%; height: 10px; clear: both;"></div>
    <h2>Mantenimiento de registros insertados con PHP Excel</h2>
        <table class="table"> 
        <thead> 
            <tr> 
                <th>#</th> 
                <th>Nombres</th> 
                <th>Apellidos</th> 
                <th>E-Mail</th> 
                <th>Genero</th> 
                <th>Edad</th> 
                <th>Carrera</th> 
            </tr> 
        </thead> 
        <tbody> 
        <?php 
        $i=0;
        while($r = mysqli_fetch_assoc($res)){$i++;
        ?>
            <tr> 
                <th scope="row"><?php echo $i; ?></th> 
                <td><?php echo $r['nombres']; ?></td> 
                <td><?php echo $r['apellidos']; ?></td> 
                <td><?php echo $r['genero']; ?></td> 
                <td><?php echo $r['edad']; ?></td> 
                <td><?php echo $r['carrera']; ?></td> 
                <td><?php echo $r['email']; ?></td> 

    
            </tr> 
        <?php } ?>
        </tbody> 
        </table>
    </div>
</div>

<?php include ("footer.php"); ?>

connect.php

<?php
$connection = mysqli_connect('localhost', 'root', '');
if (!$connection){
    die("Database conexion fallida" . mysqli_error($connection));
}
$select_db = mysqli_select_db($connection, 'php_excel');
if (!$select_db){
    die("Ha fallado la conexion" . mysqli_error($connection));
}

?>

CONCLUSIÓN: Importar datos de Excel a MySQL con php

Espero que esta breve explicación les sirva en abundancia, dejare los ficheros para que descarguen y lo implementen en sus sistemas.

CÓDIGO CORREGIDO POR ERRORES DE ACTUALIZACIÓN DEL PHP

 

 

 

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!.

49 comentarios

  1. La librería PHPExcel murió (según: https://github.com/PHPOffice/PHPExcel).
    Para la nueva versión PHP que tengo (8.0.3), no funciona. Me bota muchos errores. Para las versiones anteriores al 8.0.0 sigue funcionando.

    ¿Podrías hacer importar archivos/datos Excel para la versión 8.0.3 (última versión – Servidor Xampp)?
    La página recomienda usar la nueva librería PhpSpreadsheet. ¿Podrías subir un importar excel usando esta librería?

  2. Esta bueno el codigo me ha servido a comparacion de otros, pero tengo un problema cuando tengo un campo fecha, este en el excel sea cualquier formato me lo trae como 45923 algo asi pero en el excel esta como dd/mm/yyyy o yyyy-mm-dd (ya que he probado de ambas formas) pero no obtengo el resultado de formato fecha, alguna idea al respecto por favor.

    1. Hola Javier, el problema es por el formato de como excel lo almacena, para solucionar tiene que primero en excel cambiar al formato UNIX de esta forma suponemos que la fecha la tienes en la casilla A2 la formula seria: (A2-FECHA(1970,1,1))*86400, el resultado de esta formula luego se tendría que copiar a la casilla A2
      luego donde te estas importando los datos de excel en el archivo index.php hacerlo de esta forma para el campo donde te toma la fecha, creamos una variable $long y guardamos el campo asi:
      $long = ($objPHPExcel->getActiveSheet()->getCell(‘A’.$i)->getCalculatedValue());
      luego lo importamos en formato de fecha:
      $_DATOS_EXCEL[$i][‘Fech_Aper’] = date(‘Y/m/d’,$long);

  3. Hola, he intentado usar tu código, pero al parecer solo lee la base de datos, si sube el archivo al servidor pero no lee su contenido ni actualiza la bd pues he cambiado los valores en el archivo y sigue mostrando los mismos de la bd, crees me puedas ayudar, crees que sea que tengo otra version de Excel y el código especifica que es excel 2007?

  4. Hola Nestor… Buenas tardes… Mi consulta es la siguiente:

    Por ejemplo: Yo cargo un archivo excel con cien registros que incluyen nombre, apellidos, edad, residencia, No. de ID Nacional, No. de Cuenta de Banco, etc…, los datos se guardan por decir así en la tabla usuarios y la misma tabla les crea el id auto-increment… perfecto pero, en otro caso vengo y descargo esa base de datos en excel y resulta que de esos cien registros solo voy a actualizarles la recidencia a veinte registros y por lo tanto, las actualizaciones las hago en el excel que acabo de descargar y lo que ahora quiero es que al subir el archivo excel por decir así solo con los veinte registros que actualicé y no los cien, quiero que me los actualice en la base de datos sin incrementar esos usuarios, que siempre sean cien pero que solo se actualicen veinte pero, quiero que antes de hacer las actualizaciones, se compare primero si los números de ID nacional que van en el excel son los mismos que existen en la base de datos, por lo tanto, que no me haga las actualizaciones si los numeros de ID no son iguales y que me tire un mensaje de cuales son mis errores, en que columnas, que filas, que celda, lo que sea, pero, si todos los números de ID nacional son iguales, entonces que me actualice solo los veinte registros que actualicé en el excel sin alterar los otros cien… Eso es lo que quiero hacer…

    Por lo tanto, necesito saber si a la fecha ya existe esa función en esta importación de datos excel que estas mostrando en tu blog ya que veo que te han hecho esta pregunta dos o tres veces.

    No te mentiré… Compraré tu bault porque ya días ando con eso pero necesito saber lo siguiente:

    Si esos 156 proyectos los actualizas en base a las inconsistencias que comentan los demás en tu blog, o solo le haces las actualizaciones a los ficheros que ellos ya tienen.? Esto te lo pregunto porque viendo la fecha en la que hiciste esos proyectos, las versiones de php ya son otras y de igual manera me imagino que pasaría lo mismo con algunas librerías.

    De antemano muchas gracias.

  5. Hola nestor, estoy utilizando php 7.0 , compre los 156 sistemas de php de BaulPhp pero el programa de importar de excel a mysql utiliza librerias de PHP que no funcionan y me sale este mensaje al tratar de imortar:

    Fatal error: Uncaught Error: Call to undefined function mysql_connect() in C:\wamp64\www\Imporepu\index.php on line 48
    ( ! ) Error: Call to undefined function mysql_connect() in C:\wamp64\www\Imporepu\index.php on line 48

  6. He usado tu código, me funciona todo bien pero cuando en el excel solo hay una fila llena, y al importarla me guarda la fila llena y 4 mas vacías, no entiendo por que

    1. Hola Josue

      Es posible que en ese archivo de excel exista espacios en blanco en las celdas y por eso registra como si estuviera ocupadas almacenando en la base de datos.

      Verifica y me comentas como te fue.

  7. Hola, he intentado usar tu código, pero al parecer solo lee la base de datos, si sube el archivo al servidor pero no lee su contenido ni actualiza la bd pues he cambiado los valores en el archivo y sigue mostrando los mismos de la bd, crees me puedas ayudar, crees que sea que tengo otra version de Excel y el código especifica que es excel 2007?

  8. Hola, buen dia, estoy tratando de implementar tu ejemplo, pero me indica un error:
    PHP Fatal error: Class ‘ZipArchive’ …../vendor/SpreadsheetReader_XLSX.php on line 217
    me podrias ayudar con esto? mil gracias.

  9. Hola, al momento de importar los datos de excel a MySQL, Te borra las ya existentes, osea, los que ya están registrados en la base de datos?

  10. Hola Gracias por compartir, pero tengo una duda, al cargar el excel me muestra nuevamente el encabezado, y este lo trata de cargar a la base de datos provocando un error, como puedo hacer que lea de la segunda fila?

  11. hola me gustaría saber si es posible validar los campos que si a la hora de importar los datos me da error por algún campo que vaya vació o el tipo de dato que tiene no concuerda con el de la bd muestre en un mensaje los campos que necesitan corrección es posible ??

    1. Hola Omar,

      Si, primeramente tienes que validar los datos antes de insertar a la base de datos con “INSERT INTO”, se puede usar condicionales como por ejemplo:

      if (isset($_POST['campo1']) && !empty($_POST['campo1'])) {
         // Resto de código
      }
      

      Si esta vacio, si son numeros, etc. Una vez validado ya puedes insertar a la base de datos.

      Saludos.

  12. muy buen trabajo, funciono a la perfección,, pero como haría en el caso que los datos ya insertados solo quiera actualizarlos? como escribir la parte del update en lugar del insert into ?
    he estado intentado pero no lo he conseguido.
    nuevamente felicitaciones y muchas gracias salidos a la espera de tu respuesta

    1. Saludos Jorge,

      No te entendí muy bien,
      Lo que deseas es editar los registros insertado mediante PHP y Excel.

      Cuando se maneja Update se tiene que tener un identificador para poder editar, si es que en la base de datos hubiera cientos de registros.

      Le recomendación seria el uso de un CRUD PHP (Insertar, editar, mostrar, eliminar), para poder gestionar de manera eficiente los registros insertados.

      https://www.baulphp.com/insertar-editar-eliminar-registros-con-funcion-php-mysqli/

      1. Gracias por tu pronta respuesta
        Me refería a que en lugar de hacer esto: $sql = “INSERT INTO excel (nombres,apellidos,genero,carrera,edad,email,activo) VALUES (‘”;
        foreach ($valor as $campo2 => $valor2){
        $campo2 == “activo” ? $sql.= $valor2.”‘);” : $sql.= $valor2.”‘,'”;
        }

        Haga un update tabla… Set…
        Pero no lo consigo…
        Porque así como esta.. Cuando vuelves a subir el archivo de Excel todo se duplica…

  13. Hola.. muchas gracias por tomarte el tiempo para explicarnos esto.. en verdad mil gracias.. una cosa.. por mas que he intentado ingresar datos a la DB no he podido, pese a que soy bastante terco en esto.. pero no doy con el objetivo.. poseo los mismos campos (En cuanto a nombres se refiere) no se si tenga algo que ver el hecho de que en la tabla de la DB tengo un campo que es auto incremental a medida que se accesa al sistema.. logicamente este campo no esta en el archivo de excel..
    si no es mucha molestia te podria pasar mi codigo a ver que problema es el que tengo o en que estoy fallando.. Mil gracias

    1. Hola nitramara
      Si, envie el código completo y a base de datos para poder analizar donde se produce el error.
      Cualquier consulta, no dude en comentar.
      Saludos!

      1. Hola, he intentado enviar la informacion por este medio pero no me ha permitido la carga.. te lo puedo enviar a un correo electronico..
        Mil gracias

      2. Hola otra vez… primero que todo darle un agradecimiento por compartir tus conocimientos y experiencias para con todos nosotros los que no terminamos de comprender toda esta locura.. jejejeje
        Por otro lado, te comento que ya solucione el inconveniente que se me presentaba.. solo era cuestión de hacerle con un poco de paciencia..
        Tengo otro inconveniente distinto.. no logro capturar las fechas ya que al insertarlas en la DB me traslada solamente ceros.. y por mas que le he trabajado y he leido.. no he podido encontrar la solucion..
        Me puede por favor colaborar..
        Mil gracias

  14. Cordial saludo,

    He realizado algo similar pero tengo problemas al tratar de subir fechas, el phpexcel en algunos casos toma la fecha como texto y en otros como timestamp, sabes como corregir este problema.

    Quedo atento.

  15. que tal amigo, estuve realizando las modificaciones pertinentes que mencionas, pero no logro hacer que funcione, solo me dice que la carga a sido correcta pero no se refleja nada en la base de datos, te agradecería tu apoyo

    1. Primeramente verifica la conexión con el servidor y que las columnas sean las correctas.
      Recuerda, si modificas los campos en la base de datos, tambien tienes que editar en el fichero PHP, especificamente en INSERT INTO, los campos en la declaracion tienen que ser identicos que los campos en la base de datos.

      Saludos

  16. Hola nuevamente,
    Te quería hacer la sigte consulta, en el caso de que el excel contenga datos de fechas, de que manera primero les doy formato y las guardo.
    Gracias,

  17. hola tengo una pregunta y si despues de subir mi archivo quisiera actualizar solo unos campos como podria hacerlo subiendo de nuevo mi archivo con la informacion actualizada

    1. Saludos daniel,

      A que te refieres con campos? estimo que son registros.

      Si es asi, solo tendrias que actualizar los registros de la tabla mediante la sentencia UPDATE
      Ahora si te refieres a cambiar nombres de columnas, ahi seria diferente, se tendria que borrar todos los registros ingresados a la tabla de manera manual y volver a subir el fichero excel.

      Ante cualquier inquietud, no dude en consultar.

      Saludos cordiales!

  18. Hola, Felicitaciones por tu publicación me ayudo mucho.
    tengo una consulta, como se hace para importar datos con tildes y Ñ ? ya que a la hora que importo los datos, se importan con símbolos como estos (Ñ).

    Gracias !!.

    1. Saludos Mfer
      La solución seria:

      1. Cambiar el cotejamiento en la base de datos a “utf8_general_ci” tambien en las columnas de la tabla cambiar a dicho cotejamiento.
      2. En el fichero index.php en la linea 70 antes del insert into añadir la siguiente linea

      mysql_query(“SET NAMES utf8”); // añadir esta linea
      $sql = “INSERT INTO excel (nombres,apellidos,genero,carrera,edad,email,activo) VALUES (‘”;

      3. En el fichero header.php agregar el charset dentro de la etiqueta

      <meta charset=”utf-8″>

      Me comentas como te fue. Gracias por comentar.

      1. Hola,
        Gracías por tu pronta respuesta.
        creo que debí haber mencionado que estaba trabando con SQL server como gestor de BD, pero aun así probé con el mysql_query(“SET NAMES utf8”); que en mi caso seria sqlsrv_query(“SET NAMES utf8”); pero me daba error , así que lo omití.
        Seguido agregue esta linea de código a mi conexión “CharacterSet” => ‘UTF-8’
        array( “Database”=>””, “UID”=>”sa”, “PWD”=>””, “CharacterSet” => ‘UTF-8’ );

        y agregue el , y funciono perfectamente.

        Muchas gracias.

  19. no logro hacerlo funcionar me dice error por todos lados

    Archivo Cargado Con Éxito
    Warning: ZipArchive::getFromName(): Invalid or uninitialized Zip object in /home/barbeyto/public_html/servicios/bueno/Classes/PHPExcel/Reader/Excel2007.php on line 300

    Warning: ZipArchive::getFromName(): Invalid or uninitialized Zip object in /home/barbeyto/public_html/servicios/bueno/Classes/PHPExcel/Reader/Excel2007.php on line 303

    Warning: Invalid argument supplied for foreach() in /home/barbeyto/public_html/servicios/bueno/Classes/PHPExcel/Reader/Excel2007.php on line 373

    Warning: ZipArchive::getFromName(): Invalid or uninitialized Zip object in /home/barbeyto/public_html/servicios/bueno/Classes/PHPExcel/Reader/Excel2007.php on line 300

    Warning: ZipArchive::getFromName(): Invalid or uninitialized Zip object in /home/barbeyto/public_html/servicios/bueno/Classes/PHPExcel/Reader/Excel2007.php on line 303

    Warning: Invalid argument supplied for foreach() in /home/barbeyto/public_html/servicios/bueno/Classes/PHPExcel/Reader/Excel2007.php on line 410

    Warning: ZipArchive::close(): Invalid or uninitialized Zip object in /home/barbeyto/public_html/servicios/bueno/Classes/PHPExcel/Reader/Excel2007.php on line 1526

    Fatal error: Uncaught exception ‘Exception’ with message ‘Active sheet index is out of bounds.’ in /home/barbeyto/public_html/servicios/bueno/Classes/PHPExcel.php:365 Stack trace: #0 /home/barbeyto/public_html/servicios/bueno/index.php(43): PHPExcel->setActiveSheetIndex(0) #1 {main} thrown in /home/barbeyto/public_html/servicios/bueno/Classes/PHPExcel.php on line 365

    que formato de excel puedo cargar y como lo hago

    1. Disculpa por responder muy tarde
      Viendo los errores que muestras me tome la tarea de actualizar algunas partes de código
      Articulo mejorado

      Un error corrigido la hora actual el cual generaba un error PHP tipo Warning
      Agregamos un archivo Excel de ejemplo

      Tienes que modificar la conexion con la base de datos en el fichero conexion.php e index.php

      Linea 47 al 49 (index.php)
      // Importante – conexión con la base de datos
      $cn = mysql_connect (“localhost”,”root”,”root”) or die (“ERROR EN LA CONEXION CON LA BD”);
      $db = mysql_select_db (“excel”,$cn) or die (“ERROR AL CONECTAR A LA BD”);

      Recuerda que puedes descargar la actualización lineas arriba en el final del articulo

      Gracias por comentar!!

  20. Hola, Saludos!

    No se puede descargar el codigo, y cuando replico el ejemplo me sale el siguiente error… null, que no alamacen el contenido del excel

      1. Hola amigo, q tal, hago un ejercicio similar, pero como hacer para que importe e inserte mas de 1000 o 2000 registros en una sola ejecucion, porque se cae a los 1000 registros

Deja una respuesta

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

Botón volver arriba