Tengo este codigo con phpexcel, el cual inserta los datos de un archivo excel, el problema es que se demora mucho en insertarlos, son aprox 10.000 registros, cual puede ser la forma en optimizarlo un poco. Saludos y gracias
Código MySQL:
Ver original<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>:: Importar de Excel a la Base de Datos ::</title>
</head>
<body>
<!-- FORMULARIO PARA SOICITAR LA CARGA DEL EXCEL -->
Selecciona el archivo Listcon:
<form name
="importa" method
="post" action="<?php echo$_SERVER['PHP_SELF'];?>" enctype
="multipart/form-data" > <input
type="file" name
="excel" /> <input
type='submit' name
='enviar' value="Importar" /> <input
type="hidden" value="upload" name
="action" /> </form>
<!-- CARGA LA MISMA PAGINA MANDANDO LA VARIABLE upload -->
<?php
$action='';
if ($action
== 'upload') //si
action tiene como valor UPLOAD haga algo
(el
value de este hidden es es UPLOAD iniciado desde el
value {
//cargamos el archivo al servidor con el mismo nombre(solo le agregue el sufijo bak_)
$archivo = $_FILES['excel']['name']; //captura el nombre del archivo
$tipo = $_FILES['excel']['type']; //captura el tipo de archivo (2003 o 2007)
$destino = "bak_".$archivo; //lugar donde se copiara el archivo
if (copy
($_FILES
['excel']['tmp_name'],$destino
)) //si dese copiar la variable excel
(archivo
).nombreTemporal a destino
(bak_.archivo
) (si se ha dejado copiar
) {
echo "Archivo Cargado Con Exito";
}
{
echo "Error Al Cargar el Archivo";
}
//validacion para saber si el archivo ya existe previamente
if (file_exists
("bak_".$archivo
)) {
/*INVOCACION DE CLASES Y CONEXION A BASE DE DATOS*/
/** Invocacion de Clases necesarias */
require_once 'Classes/PHPExcel.php';
require_once 'Classes/PHPExcel/Reader/Excel2007.php';
//DATOS DE CONEXION A LA BASE DE DATOS
$cn
= mysql_connect
("localhost","root","") or die
("ERROR EN LA CONEXION");$db
= mysql_select_db
("perfilados",$cn
) or die
("ERROR AL CONECTAR A LA BD");
// Cargando la hoja de calculo
$objReader = new PHPExcel_Reader_Excel2007(); //instancio un objeto como PHPExcelReader(objeto de captura de datos de excel)
$objPHPExcel
= $objReader
->load("bak_".$archivo
); //carga en objphpExcel por medio de objReader
,el nombre del archivo
$objFecha = new PHPExcel_Shared_Date();
// Asignar hoja de excel activa
$objPHPExcel->setActiveSheetIndex(0); //objPHPExcel tomara la posicion de hoja (en esta caso 0 o 1) con el setActiveSheetIndex(numeroHoja)
// Llenamos un arreglo con los datos del archivo xlsx
$i=1; //celda inicial en la cual empezara a realizar el barrido de la grilla de excel
$param=0;
$contador=0;
while
($param
==0) //mientras el parametro siga en
0 (iniciado antes
) que quiere decir que
no ha encontrado un
NULL entonces siga metiendo datos
{
$USUARIOS=$objPHPExcel->getActiveSheet()->getCell('A'.$i)->getCalculatedValue();
$GRUPO=$objPHPExcel->getActiveSheet()->getCell('B'.$i)->getCalculatedValue();
$c=("insert into listcon values('$USUARIOS','$GRUPO')");
mysql_query($c);
if($objPHPExcel
->getActiveSheet
()->getCell
('A'.$i
)->getCalculatedValue
()==NULL) //pregunto que si ha encontrado un valor
null en una columna inicie un parametro en
1 que indicaria el fin del ciclo while
{
$param
=1; //para detener el ciclo cuando haya encontrado un valor
NULL}
$i++;
$contador=$contador+1;
}
$totalIngresados
=$contador
-1; //(porque se se para con un
NULL y le esta registrando como que tambien un dato
)echo "Total elementos subidos: $totalIngresados ";
}
else//si
no se ha cargado el bak
{
echo "Necesitas primero importar el archivo";}
unlink($destino); //desenlazar a destino el lugar donde salen los datos(archivo)
}
?>
<a href= "cargaArchivos.html" > Volver</a>
</body>
</html>