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:
Nice. Hubiera preferido un método basado en objetos, de tal manera de hacer algo como
Que a mi modo de ver es mucho más claro, que andar manejando esos arrays interminables.
El ejemplo incluido reza algo como lo siguiente:
- require_once 'Excel/reader.php';
- $data = new Spreadsheet_Excel_Reader();
- $data->setOutputEncoding('CP1251');
- $data->setUTFEncoder('mb');
- $data->read('jxlrwtest.xls');
- /*
- $data->sheets[0]['numRows'] - count rows
- $data->sheets[0]['numCols'] - count columns
- $data->sheets[0]['cells'][$i][$j] - data from $i-row $j-column
- $data->sheets[0]['cellsInfo'][$i][$j] - extended info about cell
- $data->sheets[0]['cellsInfo'][$i][$j]['type'] = "date" | "number" | "unknown"
- if 'type' == "unknown" - use 'raw' value, because cell contain value with format '0.00';
- $data->sheets[0]['cellsInfo'][$i][$j]['raw'] = value if cell without format
- $data->sheets[0]['cellsInfo'][$i][$j]['colspan']
- $data->sheets[0]['cellsInfo'][$i][$j]['rowspan']
- */
- error_reporting(E_ALL ^ E_NOTICE);
- for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
- for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
- echo "\"".$data->sheets[0]['cells'][$i][$j]."\",";
- }
- echo "\n";
- }
Nice. Hubiera preferido un método basado en objetos, de tal manera de hacer algo como
- while($aSheet=&$data->fetchSheet()) {
- while($aRow=$aSheet->fetchRow()) {
- echo $aSheet->name.' '.$aRow[1];
- }
- }
- 11901 lecturas

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 ^_^
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.
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.
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.
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
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
¿ahora como xux.. lo hago funcionar?
[^_^]
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.
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
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.
Que pasa si el excel es muy grande y tiene por ejemplo 10000 registros.
O si por casualidad tiene varias pages
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í....
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.---
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
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
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á.
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.
holas..
aca tengo una solucion re buena..
miranla por lo menos
http://blogvistor.blogspot.com
chau.
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.
Enviar un comentario nuevo