PHP - Cargar archivo .xlsx en mysql con PHPExcel

 
Vista:
Imágen de perfil de Rafael

Cargar archivo .xlsx en mysql con PHPExcel

Publicado por Rafael (1 intervención) el 02/12/2015 13:46:42
Estimados, estoy armando un simple sistema el cual me permita subir un archivo excel a una tabla de un bd mysql la cual la pueda comparar con otra tabla de la misma base de datos y así poder comparar si los registros se encuentran anteriormente subidos.

La idea es tener una tabla notaria, a la cual se puedan cargar todas las operaciones pagadas en notaria.

También tener una tabla compara la que sirve para comprobar si los registros están duplicados en la tabla notaria antes de subir el archivo excel a la tabla notaria(importar.php).

La estructura de las dos tablas es así.

1 id int(11)
2 nombre varchar(50)
3 num_op int(11)
4 no_rep int(10)
5 fecha_rep varchar(10)
6 ot int(6)
7 fecha_pago varchar(10)
8 bfact varchar(12)
9 id_notaria int(11)
10 valor int(12)
11 pagada varchar(4)
12 fecha varchar(10)

Para trabajar utilizo dos archivos, importar.php y compara.php , abajo subiré el código.

Para poder Cargar el archivo en la base de datos estoy utilizando PHPExcel, que funciona bien, puedo tomar el archivo y subirlo sin problemas.

* El problema que tengo es que me permite subir solo una vez los datos desde el importar.php ej, subo un archivo con 2500 filas, y luego quiero subir 100 operaciones o pagos de notaria no me lo permite.

importar.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<body>
<p class="formulario">* Selecciona el archivo Excel a Importar (.xlsx): </p><br/>
 
<img src="img/iconos/excel.png" width="50" height="50" /><p>
 
<form name="importa" method="post" action="<?php echo $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>
<p>
 
<?php
extract($_POST);
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";
}
else
{
echo "Error Al Cargar el Archivo";
}
 
////////////////////////////////////////////////////////
if (file_exists ("bak_".$archivo)) //validacion para saber si el archivo ya existe previamente
{
/*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 ("","","") or die ("ERROR EN LA CONEXION");
$db = mysql_select_db ("",$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
{
 
$nombre=$objPHPExcel->getActiveSheet()->getCell('B'.$i)->getCalculatedValue();
$num_op=$objPHPExcel->getActiveSheet()->getCell('C'.$i)->getCalculatedValue();
$no_rep=$objPHPExcel->getActiveSheet()->getCell('D'.$i)->getCalculatedValue();
$fecha_rep=$objPHPExcel->getActiveSheet()->getCell('E'.$i)->getCalculatedValue();
$ot=$objPHPExcel->getActiveSheet()->getCell('F'.$i)->getCalculatedValue();
$fecha_pago=$objPHPExcel->getActiveSheet()->getCell('G'.$i)->getCalculatedValue();
$bfact=$objPHPExcel->getActiveSheet()->getCell('H'.$i)->getCalculatedValue();
$id_notaria=$objPHPExcel->getActiveSheet()->getCell('I'.$i)->getCalculatedValue();
$valor=$objPHPExcel->getActiveSheet()->getCell('J'.$i)->getCalculatedValue();
$pagada=$objPHPExcel->getActiveSheet()->getCell('K'.$i)->getCalculatedValue();
$fecha=$objPHPExcel->getActiveSheet()->getCell('L'.$i)->getCalculatedValue();
 
$c=("insert into notaria2 values($i,'$nombre','$num_op','$no_rep','$fecha_re p','$ot','$fecha_pago','$bfact','$id_notaria','$va lor','$pagada','$fecha')");
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)
}
 
?>
 
 
 
</div>
 
 
</body>

La librería se puede descargar desde la siguiente dirección: https://phpexcel.codeplex.com/
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
2
Responder

Cargar archivo .xlsx en mysql con PHPExcel

Publicado por maria (1 intervención) el 27/01/2016 13:47:07
y cuando trabajas con datetime que lo recibes en formato dd-mm-yyyy h:m:s y en mysql lo recibe yyyy-mm-dd h:m:s

como haces la transformacion de fecha?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Cargar archivo .xlsx en mysql con PHPExcel

Publicado por Rafa Funes (1 intervención) el 27/01/2017 18:28:01
No veo el archivo compara.php para ver en que puedo ayudarte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 100
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Cargar archivo .xlsx en mysql con PHPExcel

Publicado por Juan (43 intervenciones) el 07/08/2017 17:54:21
Buenas Rafael

Gran aporte. Lo probaré en breve (el mes que viene) y ya te comento que tal. Yo tengo hecho cosas similares, pero cargando desde un CSV, la mecánica es más o menos la misma.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 100
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Cargar archivo .xlsx en mysql con PHPExcel

Publicado por Juan (43 intervenciones) el 08/08/2017 12:18:28
Buenas Rafael de nuevo

Acabo de probarlo ahora mismo y funciona demasiado (adapté un par de cosas para mi caso en concreto, pero funciona 100 %).

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar