El siguiente código PHP, nos permite conectar una planilla de calculo excel, a un servidor de datos como MySQL, específicamente, "tomar una planilla Excel, y cargarla en una base de datos".
Recomendaciones:
Crear una base de datos, con 1 tabla. (datos).
Crea en la tabla 3 campos (c1, c2, c3).
Crear un archivo excel, con 3 columnas, y todas las filas que guste.
Crear un archivo PHP, que pida el ingreso de un archivo.
Ej:
< type="file" name= "cualquiera">
Descargar Reader.php y Oleread.inc
Crear un archivo de conección Conect_bd.php
Ej:
< ?php function Conectarse()
{
if (!($link=mysql_connect("localhost","root","")))
{
exit();
}
if (!mysql_select_db("base_prueba",$link))
{
exit();
}
return $link;
}
?>
El código es el siguiente:
< ?php
//elimina el error de tiempo de 30 segundos del browser
//solución para planillas excel gigantescas.
set_time_limit(0);
// conección a la base de datos
include ("conect_bd.php");
$link =Conectarse();
//conección a excel
require_once 'Excel/reader.php';
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('CP1251');
$data->setUTFEncoder('mb');
$archivo = $_FILES["ruta"]["name"]; //rescatar el archivo < type=" file">
$data->read($archivo);
error_reporting(E_ALL ^ E_NOTICE);
?>
< table border ="1">
< tbody>
< ?php //la tabla se crea solo para visualizar la solución.
for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
echo "< tr>";
$sw=0;
for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
$valor = $data->sheets[0]['cells'][$i][$j];
if (!$valor) {$valor="-";}
echo "< td>".$valor."< /td>";
if ($sw == 0){
$query= mysql_query("insert into `datos`(`c1`) values ('$valor');", $link);
$sw=1;
$primer= $valor;
}
elseif ($sw == 1){
$query= mysql_query("UPDATE datos SET c2='$valor' where c1= $primer;", $link);
$sw=2;
}
elseif ($sw==2) {
$query= mysql_query("UPDATE datos SET c3='$valor' where c1= $primer;", $link);
}
}
echo "< /tr>";
}
?>
< /tbody >
< /table >
lunes, 8 de enero de 2007
Suscribirse a:
Enviar comentarios (Atom)
42 comentarios:
Hola victor!
yo tbn tengo q hacer esta misma custion! ehehe te voy a copiarte!
wajajajajajaj ñaca ñaca ñaca!
copiona...
Exelente blog Victor, se nota que tienes vocacion para la enseñanza y los consejos. A todo esto, acá en el trabajo vamos a usar la clase reader palara procesar algunos archivos exel, ¡gracias victor!. siempre he tenido ganas de hacer un blog, pero me da lata.
andres... tus conocimientos estarian muy bien aprovechados aca... no solo yo tengo que responder preguntas..
recuerda que todos pueden responder y preguntar.
siiiiii entre los dos me soplan, victor, no tendi pa que es la tabla pelona de tres campos?
(con peras y manzanas porfa)
es solo como ejemplo.
si creas una tabla en lase de datos, con los campos que c1,c2,c3
funciona.
despues cuando entiendas bien el codigo, puedes modificarlo...
el codigo es re cuadrado.
si quieres lo puedes hacer mas flexible, y buscar dentro de la tabla los campos
"show columns from datos"
pero ejecutalo tal como sale, y encontraras la luz..........................
waaaaaajajajajjaja! esta bien! seguire la luz!
vistor y me sirve pa subir TXTs?
trabajar con txt es mucho mas facil.
y no necesitas librerias adicionales.
prueba este codigo:
< ?php
include("conect_bd.php");
$link = conectarse();
$archivo="fecha.txt";
$busca=mysql_query("SELECT * FROM datos", $link);
$p=fopen("$archivo","w");
while ($row = mysql_fetch_row($busca))
{
$a=$row[0];
$a.=",$row[1]";
$a.=",$row[2]";
echo $a;
if($p)
{
fputs($p,$a);
}
echo "< br>";
}
fclose($p);
echo "< a href=$archivo>Ver archivo< /a>"
?>
ah que tay eficiente!
asi me gusta!
grande gurú!
pero tay seguro q me sirve pa cargar un BD?
Excelente tu aporte Victor ... lo he puesto en practica ajustando algunas cosas a mis necesidades y todo me funciono muy bien en mi servidor apache local, pero cuando probé la aplicacion en un hosting no funciono solo me salio el siguiente mensaje de manera masiva:
Notice: Uninitialized string offset: -512 in /home/tengo2id/public_html/leerexcel/Excel/oleread.inc on line 27
Notice: Uninitialized string offset: -511 in /home/tengo2id/public_html/leerexcel/Excel/oleread.inc on line 27
Notice: Uninitialized string offset: -510 in /home/tengo2id/public_html/leerexcel/Excel/oleread.inc on line 27
...
Notice: Uninitialized string offset: -3 in /home/tengo2id/public_html/leerexcel/Excel/oleread.inc on line 27
Notice: Uninitialized string offset: -2 in /home/tengo2id/public_html/leerexcel/Excel/oleread.inc on line 27
Notice: Uninitialized string offset: -1 in /home/tengo2id/public_html/leerexcel/Excel/oleread.inc on line 27
Notice: Undefined offset: 4294967294 in /home/tengo2id/public_html/leerexcel/Excel/oleread.inc on line 138
Notice: Undefined index: in /home/tengo2id/public_html/leerexcel/Excel/oleread.inc on line 138
Notice: Undefined index: in /home/tengo2id/public_html/leerexcel/Excel/oleread.inc on line 138
...
jejeje ... bueno Victor no se a que se debera el problema?
Hola Victor!!
A mi con mi WXP pero con Appserv no me jalo, me marca este arror:
Fatal error: Class 'R_OLE' not found in C:\AppServ\www\excel\reader.php on line 118
Como vez, tengo mi localhost/excel y ahi dentro el indice con el codigo, hay algo que no entendi:
Crear un archivo PHP, que pida el ingreso de un archivo.
Ej:
< type="file" name= "cualquiera">
en "cualquiera"="datos.xls", pero esa linea en que archivo lo meto?
x.php?? y como se llama??
Saludos!!
wenass victor...
sabes que el código no me lanza nada de nada... me quedan algunas dudas.. eso del < type="file"...
supongo que es un formulario del tipo:
< form action="file-procesa-form.php" enctype="multipart/form-data" method="POST" >
< input type="file" name="report" >
< INPUT TYPE="submit" value="Load File" >< /form >...
Acá está my otra duda:
$archivo=$_FILES["ruta"]["name"];...
en esta línea la variable $archivo toma el valor de la ruta y del nombre; estas últimas son variables?... name puede ser obtenida del form... pero y ruta de donde diantres lo saco?... naa a parte de tooo esto se agradece por el código; es bastante escasa la información acerca de cargar datos a mysql desde excel sin tener que convertir a otro formato (csv o txt); y lo que hay (php-excelreader) está mal explicao pa quienes somos novicios en php.
saludos
hola, quisas no especifique mucho lo del < input type=file>
este input pertenece a un form..
como el siguiente
< form action="cargas.php" method="post" enctype="multipart/form-data">
< input name="ruta" class="letras" type="file">
< /form>
el method y el enctype son fundamentales..
despues, en el archivo cargas.php,
ocupamos
$archivo = $_FILES["ruta"]["name"];
donde ruta es el nombre del input y name es lo que quiero rescatar de la cadena que aparecio cuande seleccione el archivo...
y ese nombre se guarda en $archivo
ojala les solucione el problem
chau
rewenasss de nuevo victor... he logrado tomar los datos de un archivo excel y mostrarlos en una tabla; pero no logro grabarlos en mi bd... a ver si me das una ayudita. le agregué un mysql_error() a la consulta sql pa ver que estaba fallando,, y me dice que no he seleccionado ninguna bd (al inicio le hice el include de conect_bd.php), asi que quedé PLOP¡¡.
A parte de eso.. el file reader.php tiene algunos errores; asi que a quienes usen la clase que revisen un poco el código (por ejemplo no tiene embebido el oleread.inc)
saludos... y a ver si me ayudas con la carga de datos en mysql.
graciass
yo acá de nuevo. Ya solucioné el problem... jaaj el usuario no tenia permisos para gestionar la base de datos PLOP¡¡. Pero ahorita tengo otra duda, como hago pa que cargue sólo el contenido de las celdas y no los titulos de las columnas?. Obviamente que las colummas de la bd tienen los mismos nombres que las del excel.
Grax por tu ayuda victor.
saludos
hola victor.. acá con mis problemas de nuevo. Pensé que todo estaba solucionado, pero, probé usando un excel de cualquier ubicación (el anterior estaba en el mismo directorio que los php); y manda el sgte. error:
Notice: Undefined property: wrkbook in c:\inetpub\wwwroot\excel-mysql-vistorblog\oleread.inc on line 218
Notice: Undefined property: rootentry in c:\inetpub\wwwroot\excel-mysql-vistorblog\oleread.inc on line 221
Notice: Undefined property: bigBlockChain in c:\inetpub\wwwroot\excel-mysql-vistorblog\oleread.inc on line 168
Por favor maestro, ayuuudame....
bueno, ese es un problema que no he pensado en solucionar....
me imagino que va por el lado del rescate de la planilla...
$archivo = $_FILES["ruta"]["name"];
porque solo nos referimos al nombre del archivo...
quisas podrias probar con algun otro parametro, o concatenando una ruta especifica a $archivo...
intenta algo asi... y me cuentas si lo solucionas.
el problema de no tomar los encabezados del excel....
$valor[0]= $data->sheets[0]['cells'][$posi][1];
if ($valor[0]!= "NOMBRE"){
//asumimos que a todos los hijos los padres lo quieren mucho y no serian capaces de ponerle como nombre.... NOMBRE... jijiiji
}
Listo...
ya esta probado..
la solucion sería:
$archivo= $_FILE["ruta"]["name"];
$archivo = "C:/" . $archivo;
con esto, tu puedes tener tus archivos xls, en la raiz c:
si agregas mas carpetas podrias definir un lugar en especial... donde guardar tus excel's....
chau.
victor
tu codigo lejos es de los mas utiles que he encontrado en la inet.
se agradece mucho el aporte, pero tengo un problema me aparece el siguiente error.
Fatal error: Class 'R_OLE' not found in /home/transanz/public_html/sistema/reader.php on line 118
te agradeceria me puedas ayudar ya que soy relativamente nuevo en esto del PHP.
Gracias.
Pttmix
Enhorabuena por su código.Después de realizar algunas pruebas, ¿sabría decirme por que me guarda solo una columna? Gracias
Hola victor, tu codigo es lejos el mas util que eh encontrado. lo implemente y me funciono con algunos detalles pero funcionó.
no me ingresa todos los registros, onda me los deja null y algunos si,
ojala me puedas responder.
de antemano gracias
Mauricio Lizana
Tema solucionado...
problema de codigo
otra solucion: para el tema de los xls en cualquier parte del computador...
$archivo= $_FILE["ruta"]["tmp_name"];
jajaja: bueno esta es la solucion definitiva... que increible, era tan simple... solo hacemos referencia al archivo temporal que se crea para cargar la planilla.
Victor Necesito tu Ayuda urgente please, ocupe tu codigo para una aplicacion que estoy desarrollando y me funciona casi todo bien, el problema es que el sistema no me funciona de forma remota, osea me carga los archivos solo en el servidor y no desde los clientes, porfa, ayudame, es urgente
msn: mlizana_ucm@hotmail.com
te lo agradecería un millon
atte:
Mauricio Lizana Soto
hola victor estoy tratando de hacer algo igual pero no entiendo en cual archivo va este codigo
soy muy novato en php
$archivo= $_FILE["ruta"]["tmp_name"];
He probado esta "libreria" pero en el campo de una celda de fecha me devuelve un numero ejemplo 14-01-2001 = 36905, el formato en el archivo excel de esta celda es Fecha, necesito hacer algo adicional para que lo convierta? el sistema que uso para generar el excel es OpenOffice. de antemano Gracias :)
can you buy xanax online xanax 2mg alprazolam - xanax xr 1 mg tablet
ambien 5 ambien cr recreational - ambien in early pregnancy
diazepam buy diazepam dosage gad - 10mg diazepam vs xanax
buy valium from canada valium rx 773 - buy valium online paypal
cheap ativan online ativan high many - ativan dosage canine
buy ativan online ativan jokes - ativan side effects and uses
buy xanax online cod buy cheap generic xanax online - much does generic xanax cost
xanax online clonazepam vs xanax dosage - xanax overdose can it kill you
xanax pills do xanax show up drug test - buy xanax online au
discount soma can you still buy soma online - carisoprodol for pain
order soma soma magazine online - soma online music
buy soma carisoprodol picture - carisoprodol 350 mg and xanax
buy valium india valium high stories - buy valium in mexico
Hola Victor tengo una duda, el excel lo lee y muestra correctamente pero me inserta solo el primer campo.
algun salvavidas por favor
Publicar un comentario