Lector de Excel, en Php nativo

Clasificado en:
Acabo de ver en la lista de correos de php un link a una interesante aplicación: PHP-ExcelReader. Este software permite leer un archivo Excel de forma nativa con php, cargando la información en un array.
El ejemplo incluido reza algo como lo siguiente:
  1.  <?php
  2.  require_once 'Excel/reader.php';
  3.  $data = new Spreadsheet_Excel_Reader();
  4.  $data->setOutputEncoding('CP1251');
  5.  $data->setUTFEncoder('mb');
  6.  $data->read('jxlrwtest.xls');
  7.  /*
  8.  $data->sheets[0]['numRows'] - count rows
  9.  $data->sheets[0]['numCols'] - count columns
  10.  $data->sheets[0]['cells'][$i][$j] - data from $i-row $j-column
  11.  $data->sheets[0]['cellsInfo'][$i][$j] - extended info about cell
  12.  $data->sheets[0]['cellsInfo'][$i][$j]['type'] = "date" | "number" | "unknown"
  13.   if 'type' == "unknown" - use 'raw' value, because cell contain value with format '0.00';
  14.  $data->sheets[0]['cellsInfo'][$i][$j]['raw'] = value if cell without format
  15.  $data->sheets[0]['cellsInfo'][$i][$j]['colspan']
  16.  $data->sheets[0]['cellsInfo'][$i][$j]['rowspan']
  17.  */
  18.  error_reporting(E_ALL ^ E_NOTICE);
  19.  for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
  20.   for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
  21.   echo "\"".$data->sheets[0]['cells'][$i][$j]."\",";
  22.   }
  23.   echo "\n";
  24.  }
  25.  ?>

Nice. Hubiera preferido un método basado en objetos, de tal manera de hacer algo como
  1.  <?php
  2.  while($aSheet=&$data->fetchSheet()) {
  3.   while($aRow=$aSheet->fetchRow()) {
  4.   echo $aSheet->name.' '.$aRow[1];
  5.   }
  6.  }
  7.  ?>
Que a mi modo de ver es mucho más claro, que andar manejando esos arrays interminables.
icono de usuario

He tenido problemas leyendo campos de tipo "Porcentaje" desde una hoja excel hacia php usando esta librería.

El problema es el siguiente, yo tengo por ejemplo una lista de campos así:
15%
30%
57%
100%
90%

Y el lector me devuelve:
0%
0%
1%
1%
1%

Obviamente se nota que para todo procentaje mayor a 50% se redonde a 1 y menor a 0, pero yo quiero leer el numero REAL. Alguien puede darme una respuesta ??? GRACIAS ^_^

Enviado por Serg|o (no verificado) el Vie, 18/04/2008 - 10:12.
icono de usuario

Bueno yo tambien e utilizado la clase Excelreader es buena ya que lo que hacia era leerla y luego lo copiaba aun archivo de texto delimitado por tabulaciones. Hacia esto para luego ejecutar el comando LOAD DATA INFILE para llenar mi tabla. Mi unico inconveniente era que al momento de subirlo a mi servidor que estaba en Centos este ya estaba con la memoria al 100% y no podia reservar nada. Modifique el php.ini pero igual.

Mi prgunta es como hacer para que no se necesite tanta memoria al leer el archivo.

Enviado por yonf (no verificado) el Vie, 08/02/2008 - 13:18.
icono de usuario

Estimados: Yo trabajé con esa clase en un proyecto para un cliente y me encontré un problema grave que tiene muy complicada mi relación con el cliente. En un campo tipo fecha (en excel la celda tiene formato fecha) al leerla en mi sistema me muestra 1 día más... veo el excel y dice 30 de octubre pero el sistema muestra 31 de octubre. La clase internamente hace una conversión de numeros a fechas (la clase, no mi sistema) y al parecer no la resuelve bien. Si alguno tiene la solución se los agradecería. Si yo la encuentro se las comento. Saludos.

Enviado por Victor enlaze_cl (no verificado) el Mar, 30/10/2007 - 15:55.
icono de usuario

HOLA A TODOS TENGO UN PROBLEMA CON EL CODIGO REALIZE TODOS LOS PASOS PARA PODER EJECUTAR ARCHIVOS DEEXCEL CON PHP PERO ME APARECE EM BLANCO LA PAGINA POR QUE POR AHI HABIA VISTO UN COMENTARIO QUE HAY QUE CAMBIARLE LA RUTA EN READER.PHP PARA LEER EL ARCHIVO PERO NO SE DONDE ESPERO ME PUEDAN AYUDAR ME SUPER URGE MUCHISIMAS GRACIAS DE ANTEMANO.

Enviado por ANGEL (no verificado) el Mar, 04/12/2007 - 11:49.
icono de usuario

que tal, he leido el articulo y tengo una duda:

yo necesito leer un archivo excel ya generado, mediante php voy a abrir este archivo, una vez que yo oprima el boton de "abrir" me tiene que abrir el archivo excel y tiene que jalar unos datos desde mysql por medio de una clave de usuario previamente introducida, por ejemplo, una vez abierto el archivo, que jale el registro de la columna "nombre" y lo posicione en la celda A4, el registro "horas" en D5, y el registro "sueldo" en G8.

esto lo puedo hacer con la herramienta que aqui describen????
gracias

Enviado por trucutrucu (no verificado) el Mar, 27/11/2007 - 15:06.
icono de usuario

Victor si hace la converción siempre a un mismo número más, haz una función que te cálcule un día menos

Enviado por Perejilillo desconocido (no verificado) el Vie, 18/04/2008 - 15:01.
icono de usuario

¿ahora como xux.. lo hago funcionar?

[^_^]

Enviado por ochovio (no verificado) el Mar, 29/03/2005 - 10:23.
Imagen de clbustos

Descarga el archivo, ponlo donde corresponde y ocupa
$data->read('nombre_archivo.xls');
para que comience la lectura del archivo y
print_r($data->sheets);
Para que vea la estructura de los datos.

Enviado por clbustos el Mar, 29/03/2005 - 16:43.
icono de usuario

la informacion que imprime no tiene sentido. hay alguna forma de ordenarla y que tenga sentido? esto es lo que imprime:

","BAJO","ACTIVA","ACTIVA","ANTONIO TORO","NA","Brsclm05 / NA / -","-","ANTONIO TORO","AIT - INTEVEP","Falta","","","","","METODOS DE PRODUCCI?N","\\Brsclm05\APLIC\NODALB3","\\Labsur01\Insoft\Manuales de Aplicaciones","Listo","", "","1068","SEE","SISTEMA PARA EVALUACIONES ECONOMICAS","MEDIO","ACTIVA","","","","","","NESTOR AVILA","AIT - CRP","","","","","","TODAS","G:\CORP\see","\\Labsur01\Insoft\Manuales de Aplicaciones","Listo","", "","3127","COMPUTADOR CENTRAL: RESET","SISTEMA DE RESERVACIONES TRAFICO Y ALOJAMIENTO","MEDIO","ACTIVA","","","","","","DAHIANA GOMEZ","AIT - METRO","","","","","","TODAS","G:\Distrib\QWS3270PLUS\","-","Listo","MARLON", "","2094","COMPUTADOR CENTRAL: GADET","GASTOS Y DEUDAS DEL

Enviado por marlon (no verificado) el Mar, 17/05/2005 - 15:45.
Imagen de clbustos
Je, bueno, creo que fue culpa mía por copiar el código tal cual. Prueba con esto, y te quedará más claro
  1.  <?php
  2.  
  3.   for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
  4.   for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
  5.   echo "Fila $i, Col. $j:".$data->sheets[0]['cells'][$i][$j]."<br />";
  6.   }
  7.   echo "\n";
  8.   }
  9.  ?>
Enviado por clbustos el Mié, 18/05/2005 - 03:40.
icono de usuario

Me parece excelente esta aplicación y ya estoy utilizandola, pero tengo un problema con el formato de la fecha pues he modificado un poco el codigo para que en lugar de mostrar en pantalla la información, cree una sentencia SQl que permita cargar directamente el archivo XLS a una tabla de MySQL, hasta hay todo bien, pero con los campos de fecha hay un problema y es que se requiere que el formato sea AAAA-MM-DD HH:MM:SS (datetime) ó AAAA:MM:DD (date) para que se pueda insertar el registro a la tabla, pero el formato que aparece nunca es funcional, estuve revisando el archivo reader.php donde define los formatos de fecha ($dateFormats) pero la verdad no pude hacer mayor cosa, si alguien sabe como solucionar este incoveniente estaria muy agradesido.

Enviado por Carlos Pumarejo (no verificado) el Lun, 23/05/2005 - 17:29.
icono de usuario

Que pasa si el excel es muy grande y tiene por ejemplo 10000 registros.
O si por casualidad tiene varias pages

Enviado por nicolas (no verificado) el Mié, 23/11/2005 - 11:35.
Imagen de clbustos

Que pasa si el excel es muy grande y tiene por ejemplo 10000 registros.
Estás frito, a menos que tengas unos 2Gb de memoria
O si por casualidad tiene varias pages
No hay problema, ocupas sheets[1], sheets[2] y así....

Enviado por clbustos el Mié, 23/11/2005 - 11:47.
icono de usuario

Hola tienen algun ejemplo de como leer el Excel y luego pasar los datos a una tabla que tiene la misma estructura que el Excel.

Gracias de antemano.

Saludos.

P4blo.---

Enviado por P4blo (no verificado) el Vie, 20/01/2006 - 16:17.
icono de usuario

Hola, en el ejemplo anterior pusieron como leer los datos en fila y columna, ahora bien con los datos que obtienes en esa matriz, como lo vas leyendo asi se va guardando en la BD, obviamente tienes que poner la referencia al momento en que haces tus insert a la BD

Saludos

Farid Bielma Lopez
http://fbielma.org

Enviado por Perijilillo Desconocido (no verificado) el Mar, 04/07/2006 - 00:01.
icono de usuario

lo estoy probando y tengo problemas para ller exels bajados desde una web.
con los generados por mi mismo funciona barbaro, alguien tiene alguna idea de que puede ser?
formato?
encoding?

gracias

Enviado por frederix (no verificado) el Vie, 07/07/2006 - 16:42.
icono de usuario

He utilizado esta libreria y me ha parecido muy funcional. Sin emabrgo he identificado un problema que es grave, por lo menos en mi caso:
Si el valor de una celd consiste en una referencia a otra celda en una hoja diferente (ej. =HOJA1!A1), excelReader no identifica valor alguno, por lo que en el array generado el valor es vacío ''.

Espero que alguien sepa como solucionar este problema, sin cambiar el archivo excel, claro está.

Enviado por yalcone (no verificado) el Jue, 14/12/2006 - 15:03.
icono de usuario

esta muy buena esa clase, pero ¿como podriamos hacer para lo contrario? es decir cargar datos que yo tenga en php en un archivo especifico de excel.

De antemano Gracias.

Enviado por rynkydynky (no verificado) el Jue, 21/12/2006 - 18:29.
icono de usuario

holas..
aca tengo una solucion re buena..
miranla por lo menos

http://blogvistor.blogspot.com

chau.

Enviado por victor (no verificado) el Mar, 09/01/2007 - 13:47.
icono de usuario

Yo trabajo mucho con las web y pues en mi opinión hay muchos codigos php para hacer la conversion EXCEL>PHP Y PHP>EXCEL. Pero la mayoria les falta los que otros tienen y viceversa. Mi pregunta es si no hay algun codigo que lea el documento .xls y lo imprima en la web con php, aparte de visualizar como escribieron arriba, los resultados de las celdas que dan referencias a otras celdas de otras hojas, vaya, que se visalize exactamente como lo vemos en el excel.

Enviado por Shiru_Jan (no verificado) el Mié, 14/02/2007 - 13:53.

Enviar un comentario nuevo

El contenido de este campo se mantiene como privado y no se muestra públicamente.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato