Anda di halaman 1dari 6

Pasos para leer un archivo Excel/.

csv con PHP y almacenarlo en nuestra base de datos

Vamos a ver cmo transformar un archivo Excel en un archivo .csv para poder leerlo desde nuestra
aplicacin usando PHP y as poderlo almacenar en nuestra base de datos.
La estructura que vamos a usar para nuestra plantilla en Excel es usar la primera lnea para poner el ttulo de
nuestros campos como por ejemplo Nombre, edad y profesin y el resto de lneas se corresponder a los datos
que deseemos insertar.

La primera lnea haremos que no se lea porque contiene los ttulos como veremos ms adelante.

Creamos el archivo .csv para cargarlo en nuestra aplicacin mediante PHP


Comencemos por el principio, abrimos un documento Excel y completamos la primera lnea con los ttulos de
la columna y despus rellenamos las siguientes lneas con los datos que deseemos cargar en la base de datos.

A la tabla se le puede aadir efectos visuales como colores, eso no nos condicionar a la hora de trabajar.

Ahora deberemos de guardar nuestra Excel en formato .csv, para ello pulsamos archivo/guardar
como/examinar/CSV (Delimitado por comas).
Una vez tengamos nuestro archivo guardado podemos abrirlo con un editor de texto como el bloc de notas y
veremos lo siguiente:

Ya tenemos nuestro archivo preparado, como vemos la primera lnea no se va a leer, aunque ms adelante
explicar tambin cmo hacer que tambin lea la primera lnea por si no queremos ponerle ttulos a las
columnas.

Leemos los datos del archivo .csv con el siguiente cdigo en PHP
Ahora pasamos al cdigo de nuestra aplicacin, para comenzar explicar que se va a trabajar sobre dos
archivos, el primero ser donde se suba nuestro archivo.csv mediante un formulario y el segundo ser el que
reciba el archivo.csv y se encargue de leerlo y guardarlo en nuestra base de datos, para este ejemplo
usaremos MySQL.
Cdigo del formulario:

<form action="importar.php" enctype="multipart/form-data" method="post">


<input id="archivo" accept=".csv" name="archivo" type="file" />
<input name="MAX_FILE_SIZE" type="hidden" value="20000" />
<input name="enviar" type="submit" value="Importar" />
</form>
Seleccionamos nuestro archivo y le damos a enviar.

Recibimos nuestro archivo en importar.php.


Antes que nada deberemos conectarnos a una base de datos y comprobar que su conexin es correcta.
<?php
//obtenemos el archivo .csv
$tipo = $_FILES['archivo']['type'];

$tamanio = $_FILES['archivo']['size'];

$archivotmp = $_FILES['archivo']['tmp_name'];

//cargamos el archivo
$lineas = file($archivotmp);

//inicializamos variable a 0, esto nos ayudar a indicarle que no lea la primera lnea
$i=0;

//Recorremos el bucle para leer lnea por lnea


foreach ($lineas as $linea_num => $linea)
{
//abrimos bucle
/*si es diferente a 0 significa que no se encuentra en la primera lnea
(con los ttulos de las columnas) y por lo tanto puede leerla*/
if($i != 0)
{
//abrimos condicin, solo entrar en la condicin a partir de la segunda pasada del bucle.
/* La funcion explode nos ayuda a delimitar los campos, por lo tanto ir
leyendo hasta que encuentre un ; */
$datos = explode(";",$linea);

//Almacenamos los datos que vamos leyendo en una variable


//usamos la funcin utf8_encode para leer correctamente los caracteres especiales
$nombre = utf8_encode($datos[0]);
$edad = $datos[1];
$profesion = utf8_encode($datos[2]);

//guardamos en base de datos la lnea leida


mysql_query("INSERT INTO datos(nombre,edad,profesion)
VALUES('$nombre','$edad','$profesion')");

//cerramos condicin
}

/*Cuando pase la primera pasada se incrementar nuestro valor y a la siguiente pasada ya


Entraremos en la condicin, de esta manera conseguimos que no lea la primera lnea.*/
$i++;
//cerramos bucle
}
?>
Espero que el artculo os guste, realmente para algunas aplicaciones puede ser muy til guardar informacin
desde una Excel, esto nos puede ahorrar mucho tiempo de trabajo. Hemos explicado el caso con MySQL
pero no habra problemas en usar otras bases de datos como Oracle o PostgreSQL.

Importar de excel a mysql con php


Necesitas importar registros a tu base de datos desde Excel y an no sabes cmo hacerlo?,
en este artculo te explico con un ejemplo sencillo como puedes hacerlo, as que no te pierdas
este artculo y mejor an lelo hasta el final.

Te va ser muy til cuando necesitas cargar datos que ya tienes almacenados en una hoja de
Excel y que ahora necesitas insertarlos en tu base de datos, o bien necesitas jalar datos del
mismo Excel para realizar clculos en tu cdigo, etc. muchos ejemplos donde necesites leer un
documento en Excel.

Pero bueno a ti te interesa el ejemplo y eso te voy a explicar ahorita, paso a paso:

Primero: La base de datos que voy a utilizar para este ejemplo se llama: escuela y la tabla en la
voy insertar los registros extrados de Excel se llama alumnos y tiene los campos (id, no control,
nombre, grado, grupo, sexo).

Segundo: Necesitas descargar la Clase PHPExcel de Maarten Balliauw (tiene licencia LGPL), y
la puedes descargar desde aqu http://www.codeplex.com/PHPExcel, o bien ya viene incluida
en el ejemplo.

Tercero: El siguiente cdigo es el que hace el trabajo pesado, se encuentra comentado:

<! http://ProgramarEnPHP.wordpress.com >

<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 a importar:

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

<! CARGA LA MISMA PAGINA MANDANDO LA VARIABLE upload >

<?php

extract($_POST);

if ($action == upload){

//cargamos el archivo al servidor con el mismo nombre

//solo le agregue el sufijo bak_

$archivo = $_FILES[excel][name];

$tipo = $_FILES[excel][type];

$destino = bak_.$archivo;

if (copy($_FILES[excel][tmp_name],$destino)) echo Archivo Cargado Con xito;

else echo Error Al Cargar el Archivo;

////////////////////////////////////////////////////////

if (file_exists (bak_.$archivo)){

/** Clases necesarias */

require_once(Classes/PHPExcel.php);

require_once(Classes/PHPExcel/Reader/Excel2007.php);

// Cargando la hoja de clculo

$objReader = new PHPExcel_Reader_Excel2007();

$objPHPExcel = $objReader->load(bak_.$archivo);

$objFecha = new PHPExcel_Shared_Date();

// Asignar hoja de excel activa

$objPHPExcel->setActiveSheetIndex(0);

//conectamos con la base de datos

$cn = mysql_connect (localhost,root,pass) or die (ERROR EN LA CONEXION);

$db = mysql_select_db (escuela,$cn) or die (ERROR AL CONECTAR A LA BD);

// Llenamos el arreglo con los datos del archivo xlsx


for ($i=1;$i<=47;$i++){

$_DATOS_EXCEL[$i][nocontrol] = $objPHPExcel->getActiveSheet()->getCell(B.$i)-
>getCalculatedValue();

$_DATOS_EXCEL[$i][nombre] = $objPHPExcel->getActiveSheet()->getCell(C.$i)-
>getCalculatedValue();

$_DATOS_EXCEL[$i][grado]= $objPHPExcel->getActiveSheet()->getCell(D.$i)-
>getCalculatedValue();

$_DATOS_EXCEL[$i][grupo]= $objPHPExcel->getActiveSheet()->getCell(E.$i)-
>getCalculatedValue();

$_DATOS_EXCEL[$i][sexo] = $objPHPExcel->getActiveSheet()->getCell(F.$i)-
>getCalculatedValue();

//si por algo no cargo el archivo bak_

else{echo Necesitas primero importar el archivo;}

$errores=0;

//recorremos el arreglo multidimensional

//para ir recuperando los datos obtenidos

//del excel e ir insertandolos en la BD

foreach($_DATOS_EXCEL as $campo => $valor){

$sql = INSERT INTO alumnos VALUES (NULL,';

foreach ($valor as $campo2 => $valor2){

$campo2 == sexo ? $sql.= $valor2.); : $sql.= $valor2.,';

$result = mysql_query($sql);

if (!$result){ echo Error al insertar registro .$campo;$errores+=1;}

/////////////////////////////////////////////////////////////////////////

echo <strong><center>ARCHIVO IMPORTADO CON EXITO, EN TOTAL $campo REGISTROS


Y $errores ERRORES</center></strong>;

//una vez terminado el proceso borramos el


//archivo que esta en el servidor el bak_

unlink($destino);

?>

</body>

</html>
Cuarto: Te explico, lo primer

o es el formulario HTML que solicita el archivo a importar, luego una vez copiado correctamente
el mismo en el servidor y gracias a la clase PHPExcel comenzamos a recorrerlo y obtener los
datos del mismo hacia un arreglo multidimensional, ojo aqu se podra ir creando la consulta sql
para insertarlo en la BD, pero la idea de guardarlo en el arreglo es poder procesar, utilizar y/o
calcular si lo fuese necesario con esos datos almacenados.

Ya una vez almacenado los datos en el arreglo ahora los utilizamos para pasarlos a la
consulta que se encarga de insertar los datos.

Anda mungkin juga menyukai