Foros del Web » Programando para Internet » PHP »

consulta a fichero excel

Estas en el tema de consulta a fichero excel en el foro de PHP en Foros del Web. Hola foreros. Necesito ayuda en la consulta a un fichero de usuarios creado en excel. hasta ahora para hacer login lo hago con mysql en ...
  #1 (permalink)  
Antiguo 19/10/2012, 11:27
 
Fecha de Ingreso: septiembre-2010
Mensajes: 37
Antigüedad: 13 años, 7 meses
Puntos: 1
consulta a fichero excel

Hola foreros.
Necesito ayuda en la consulta a un fichero de usuarios creado en excel.
hasta ahora para hacer login lo hago con mysql en la base de datos del servidor.
pero el cliente me pide que el fichero de usuarios lo quiere en excel y que lo cuelge en el hosting.
para saber si el usuario existe? como habro el fichero excel y busco que exista un usuario con los campos que tengo en el formulario??y recojo los valores de direccion y telefono del usuario?
gracias.
  #2 (permalink)  
Antiguo 19/10/2012, 11:50
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: consulta a fichero excel

Hmmm excell es un archivo binario, dificil de leer. Lo que te recomiendo es que uses mejor csv, es un archivo de texto que con PHP no vas a tener problemas de leer y con excel se puede abrir y modificar tambien.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 19/10/2012, 12:10
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: consulta a fichero excel

Concuerdo que un csv en más fácil de leer, sin embargo también es posible con la librería phpexcel excel de codeplex abrir el excel, y recorrerlo para ver si existe el dato que buscas. Claro que no será una búsqueda tipo consulta mysql, si no manual.
  #4 (permalink)  
Antiguo 20/10/2012, 08:25
 
Fecha de Ingreso: septiembre-2010
Mensajes: 37
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: consulta a fichero excel

Holas. gracias a vuestras respuestas.
He seguido el procedimiento de leer ficheros csv i veo el total del fichero pero no se como se hace la busqueda sin necesidad de ver el fichero por pantalla.
solo buscar si existe un registro con ese usuario y password.
tambien prepefiria hacerlo desde el mismo xls en vez del csv.
podeis decirme cual es el codigo de buscar solo el registro del input si puede ser a fichero xls.
Gracias.
  #5 (permalink)  
Antiguo 20/10/2012, 11:08
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 7 meses
Puntos: 80
Respuesta: consulta a fichero excel

Te dejo un ejemplo que quizas te pueda ayudar.
Usa la libreria PHPExcel de Codeplex que la puedes descargar del sitio.
La idea es que sea un excel con la primera fila tipo Encabezados.

usuario clave
UNO 11111
DOS 2222
TRES 3333
CUATRO 4444

Y que empiece en la Columna A Fila 1.
Código PHP:
Ver original
  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5.         <title>EJEMPLO PHPEXCEL LEER ARCHIVO</title>
  6.     </head>
  7.     <body>
  8. <?php
  9. // Lanza todos los errores
  10. error_reporting(E_ALL  | E_STRICT);
  11. // Tiempo ilimitado para el script
  12.  
  13. // Direccion con nombre de Archivo.
  14. $file   = './claves.xlsx';
  15. $extencion  = substr(strrchr($file, '.'), 1);
  16.  
  17. // Tipos de Archivos capaces de Manejar con PHPExcel anteriores a 2007 y posteriores.
  18. $tipoExcel  = array('xlsx'  => 'Excel2007',
  19.                     'xls'   => 'Excel5');
  20. // Incluyo las librerias que voy a utilizar
  21. require_once 'PHPExcel/Classes/PHPExcel.php';
  22. require_once 'PHPExcel/Classes/PHPExcel/IOFactory.php';
  23. // Creo un objeto de Lectura con el tipo de Archivo Correcto Excel20007(xlsx)
  24. // Excel5(xls)
  25. $objReader      = PHPExcel_IOFactory::createReader($tipoExcel[$extencion]);
  26. // Configuro que sera solo para leer el archivo
  27. $objReader  ->setReadDataOnly(true);
  28. // Cargo el Archivo
  29. $objPHPExcel    = $objReader->load($file);
  30. $objWorksheet   = $objPHPExcel->getActiveSheet();
  31. $nroColumnas    = PHPExcel_Cell::columnIndexFromString($objWorksheet->getHighestColumn());
  32. $nroFilas       = $objWorksheet->getHighestRow();
  33. echo "Su Excel Contiene:<br> $nroColumnas columnas y <br> $nroFilas filas<br>";
  34.  
  35. // Extraigo los Titulos
  36. $titulos = array();
  37. for ($i=0; $i<= $nroColumnas-1; $i++) {
  38.     $titulos[$i] = $objWorksheet->getCellByColumnAndRow($i, 1)->getCalculatedValue();
  39. }
  40. echo 'Sus Titulos: ' . implode(', ', $titulos);
  41.  
  42. $datos      = array();
  43. $campoId    = 'usuario'; // Este deberia ser uno de los campos como  titulo columnas
  44. for ($fila = 2; $fila <= $nroFilas; $fila++) {
  45.     $dFilas = array();
  46.     for ($columna = 0; $columna <= $nroColumnas-1; $columna++) {
  47.         $dFilas[$titulos[$columna]] = $objWorksheet->getCellByColumnAndRow($columna, $fila)->getCalculatedValue();
  48.     }
  49.    
  50.     $datos[$dFilas[$campoId]]   = $dFilas;
  51. }
  52.  
  53. echo '<pre>';
  54. var_dump($datos);
  55. echo '</pre>';
  56.  
  57. // Usuario a Buscar
  58. $usuario = 'UNO';
  59.  
  60. if (isset($datos[$usuario])) {
  61.     echo 'Usuario: <pre>';
  62.     echo var_dump($datos[$usuario]);
  63.     echo '<pre>';
  64. }
  65. ?>
  66.     </body>
  67. </html>

Espero te pueda ayudar.

Saludos
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #6 (permalink)  
Antiguo 20/10/2012, 16:26
 
Fecha de Ingreso: septiembre-2010
Mensajes: 37
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: consulta a fichero excel

El ejemplo me ha ido perfecto.

he quitado algunos echo para ver solo el registro del usuario que busca.
extraigo y veo la información del usuario que le paso por variable.
(aunque hay mucho texto por medio solo queria ver el contenido de las celdas)

Pero por cada campo del registro excel (usuario,clave,dirección,telefono)como las cargo en variables para continuar procesando cosas en php.
Y si lo que busco esta en una celda en concreto?
por ejemplo C20. y su contenido es un valor por ejemplo 20
puedes ayudarme?
gracias
  #7 (permalink)  
Antiguo 20/10/2012, 16:30
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 7 meses
Puntos: 80
Respuesta: consulta a fichero excel

Mira te dejo un aporte que hice exactamente por tu caso;
http://www.forosdelweb.com/f18/aport...array-1018959/

Fíjate ahí y me vas comentando, si bien es una clase te puede dar mas luz en el caso.

Saludos y veo como ir a una celda en especial
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #8 (permalink)  
Antiguo 20/10/2012, 17:26
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 7 meses
Puntos: 80
Respuesta: consulta a fichero excel

Si quieres extraer solamente el dato directamente de excel sin crear el arreglo.
Código PHP:
Ver original
  1. $celda = "B3";
  2.         list($columna, $fila) = PHPExcel_Cell::coordinateFromString($celda);
  3.         $columna    = PHPExcel_Cell::columnIndexFromString($columna);
  4.      
  5.         // Creo un objeto de Lectura con el tipo de Archivo Correcto Excel20007(xlsx), Excel5(xls)
  6.         $objReader  = PHPExcel_IOFactory::createReader($this->_tipoPHPExcel);
  7.         // Configuro que sera solo para leer el archivo
  8.         $objReader  ->setReadDataOnly(true);
  9.         // Cargo el Archivo
  10.         $objPHPExcel    = $objReader->load($this->_file);
  11.         $objWorksheet   = $objPHPExcel->getActiveSheet();
  12.    
  13.         return $objWorksheet->getCellByColumnAndRow($columna - 1, $fila)->getCalculatedValue();

Hay una forma mas rapida creo que solo para xlsx con filtros pero para eso se debe utilizar solamante clases creo.

Saludos y espero te sirva...
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #9 (permalink)  
Antiguo 20/10/2012, 18:24
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 7 meses
Puntos: 80
Respuesta: consulta a fichero excel

Te dejo una actualizacion de la clase del APORTE de excel a array

Saludos
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #10 (permalink)  
Antiguo 21/10/2012, 05:24
 
Fecha de Ingreso: septiembre-2010
Mensajes: 37
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: consulta a fichero excel

Hola.
he puesto el nombre del fichero excel que uso en tu ejemplo y la pag. sale en blanco pero sin errores. falta poner algun dato en tu ejemplo???

en el de buscar solo la celda, donde se pone el nombre del fichero excel??

gracias.
  #11 (permalink)  
Antiguo 21/10/2012, 07:27
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 7 meses
Puntos: 80
Respuesta: consulta a fichero excel

Mira si estas usando la clase que esta en : ExcelToArray - Excel a Array la había puesto aquí como aporte pero esta inaccesible , que tiene las ultimas modificaciones entonces,
si quieres acceder a un valor del excel directamente sin cargar el arreglo debes:

(1) Incluir la clase del enlace
(2) Instanciar la clase donde pasaremos como parámetro el nombre de archivo.
(3) Pedirle al metodo getValueCellFromExcel(celda) la celda que queremos.

Código PHP:
Ver original
  1. require_once 'ExcelToArray.php'; // (1)
  2. $file       = './claves_2.xlsx';
  3. $objExcel   = new ExcelToArray($file); //(2)
  4.  
  5. // Buscar por Celda A3 directamente de Excel no Crea el Arreglo
  6. echo $objExcel->getValueCellFromExcel('A3'); //(3)

Saludos
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp

Última edición por portalmana; 21/10/2012 a las 08:16
  #12 (permalink)  
Antiguo 21/10/2012, 12:10
 
Fecha de Ingreso: septiembre-2010
Mensajes: 37
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: consulta a fichero excel

Hola. de nuevo.
Te comento que el ejemplo de buscar en la celda me va perfecto.
lo he implantado y recojo el valor de esta celda para operar con ella.

El de encontrar el usuario que busco me funciona y veo todos los campos de ese usuario.
aunque hay mucho texto "basura"
pero no se como recoger los valores de los campos del usuario encontrado y ponerlos en variables sin necesidad de ver nada en pantalla.
gracias.
  #13 (permalink)  
Antiguo 21/10/2012, 13:46
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 7 meses
Puntos: 80
Respuesta: consulta a fichero excel

Mostrame el Codigo que estas usando.
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #14 (permalink)  
Antiguo 22/10/2012, 10:21
 
Fecha de Ingreso: septiembre-2010
Mensajes: 37
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: consulta a fichero excel

Hola. mira este es el codigo que tengo y consigo ver los datos del usuario buscado. pero los campos que me enseña quiero capturarlos en variables.
campo usuario, campo clave, campo direccion, campo telefono, etc.

codigo:
<?php
// Lanza todos los errores
error_reporting(E_ALL | E_STRICT);
// Tiempo ilimitado para el script
set_time_limit(0);

// Direccion con nombre de Archivo.
$usu="cris";

$file = 'claves.xls';
$extencion = substr(strrchr($file, '.'), 1);

// Tipos de Archivos capaces de Manejar con PHPExcel anteriores a 2007 y posteriores.
$tipoExcel = array('xlsx' => 'Excel2007',
'xls' => 'Excel5');
// Incluyo las librerias que voy a utilizar
require_once 'PHPExcel.php';
require_once 'PHPExcel/IOFactory.php';
// Creo un objeto de Lectura con el tipo de Archivo Correcto Excel20007(xlsx)
// Excel5(xls)
$objReader = PHPExcel_IOFactory::createReader($tipoExcel[$extencion]);
// Configuro que sera solo para leer el archivo
$objReader ->setReadDataOnly(true);
// Cargo el Archivo
$objPHPExcel = $objReader->load($file);
$objWorksheet = $objPHPExcel->getActiveSheet();
$nroColumnas = PHPExcel_Cell::columnIndexFromString($objWorksheet->getHighestColumn());
$nroFilas = $objWorksheet->getHighestRow();
//echo "Su Excel Contiene:<br> $nroColumnas columnas y <br> $nroFilas filas<br>";

// Extraigo los Titulos
$titulos = array();
for ($i=0; $i<= $nroColumnas-1; $i++) {
$titulos[$i] = $objWorksheet->getCellByColumnAndRow($i, 1)->getCalculatedValue();
}
//echo 'Sus Titulos: ' . implode(', ', $titulos);

$datos = array();
$campoId = 'usuario'; // Este deberia ser uno de los campos como titulo columnas
for ($fila = 2; $fila <= $nroFilas; $fila++) {
$dFilas = array();
for ($columna = 0; $columna <= $nroColumnas-1; $columna++) {
$dFilas[$titulos[$columna]] = $objWorksheet->getCellByColumnAndRow($columna, $fila)->getCalculatedValue();
}

$datos[$dFilas[$campoId]] = $dFilas;
}


// Usuario a Buscar
$usuario = $usu;

if (isset($datos[$usuario])) {
echo 'Usuario: <pre>';
echo var_dump($datos[$usuario]);
echo '<pre>';

}else
{
echo "no existe";}

?>

gracias.
  #15 (permalink)  
Antiguo 22/10/2012, 10:52
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 7 meses
Puntos: 80
Respuesta: consulta a fichero excel

Puedes extraer los datos de distintas maneras dado que lo que tienes es un arreglo asociativo.

La función var_dump nos sirve para ver como esta estructurado ese arreglo, y de esa forma podemos saber como extraer los datos del mismo, dado que nos vuelca la información de una determinada variable.

Lo que te da como resultado el var_dump de $datos[$usuario], es algo parecido a:
Código PHP:
Ver original
  1. array(4) {
  2.   ["usuario"]=>
  3.   string(11) "objetivophp"
  4.   ["clave"]=>
  5.   string(16) "idudnbsakjdhasnd"
  6.   ["email"]=>
  7.   string(22) "[email protected]"
  8.   ["perfil"]=>
  9.   float(1)
  10. }
Y lo que te dice que esa posición del arreglo contiene dentro otro arreglo (array multidimensional), asociativo, o sea que puedes extraer los datos como cualquier arreglo.
Puedes Hacer:
Código PHP:
Ver original
  1. $miUsuario  = $datos[$usuario];
  2. $usuario    = $miUsuario['usuario'];
  3. $clave      = $miUsuario['clave'];
  4. $email      = $miUsuario['email'];
  5. $perfil     = $miUsuario['perfil'];
  6. echo $usuario . ' ' . $clave . ' ' . $email . ' ' . $perfil . '<br>';
En este caso $miUsuario pasara a ser un arreglo asociativo de una dimensión y extraes fácilmente los datos.

Otra Forma, seria usar directamente el arreglo multidimensional.
Código PHP:
Ver original
  1. $usuario    = $datos[$usuario]['usuario'];
  2. $clave      = $datos[$usuario]['clave'];
  3. $email      = $datos[$usuario]['email'];
  4. $perfil     = $datos[$usuario]['perfil'];
  5. echo $usuario . ' ' . $clave . ' ' . $email . ' ' . $perfil . '<br>';
Y por ultimo usar LIST, pero como es asociativo y necesitamos solo indices numericos, le aplicamos antes array_values
Código PHP:
Ver original
  1. list($usuario, $clave, $email, $perfil) = array_values($datos[$usuario]);
  2. echo $usuario . ' ' . $clave . ' ' . $email . ' ' . $perfil . '<br>';

Saludos y espero que esto te aclare el panorama.

P.D.: es importante saber manejar arreglos dado que son cosa básicas del lenguaje y pueden ayudar a resolver mas fácilmente determinado tipos de problemas. Te deje algunos enlaces para que investigues que realiza cada funcion o estructura php que usamos.
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #16 (permalink)  
Antiguo 22/10/2012, 13:57
 
Fecha de Ingreso: septiembre-2010
Mensajes: 37
Antigüedad: 13 años, 7 meses
Puntos: 1
De acuerdo Respuesta: consulta a fichero excel

Hola.
Si señor esta ha sido la solución. me la imaginaba asi y no la prové.
recojo los campos que pida y efectivamente guardadas en variables para luego procesar más. OK.
Te agradezco tu seguimiento.
doy por cerrado el tema.

Etiquetas: excel, fichero, formulario, mysql, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:23.