Vamos a ver como podemos leer archivos Excel programando en PHP.
Como podemos encontrar en php.net existe una función que nos permite leer archivos .csv desde PHP, esta función es fgetcsv()
Descripción
array fgetcsv ( resource $handle [, int $length [, string $delimiter [, string $enclosure [, string $escape ]]]] )
similar a fgets() , pero fgetcsv() parsea la línea que lee en formato CSV y devuelve un array que contiene los campos leídos.
La función fgetcsv no nos sirve para leer nuestros ficheros en Excel. Buscando por internet he encontrado una función que sí que lo hace, aunque con pequeños retoques, ya que lo que hay en internet no funciona.
Se trata de la función PHP-ExcelReader, que podemos encontrar en ESTE ENLACE
Pero si descomprimes los ficheros oleread.inc y reader.php y te creas una página php para poder utilizarlos...
te da un error de esta forma...
Warning: require_once(Spreadsheet/Excel/Reader/OLERead.php) [function.require-once]: failed to open stream: No such file or directory in C:AppServwwwPracticaphpExcelReaderExcel eader.php on line 31
¿por qué? Fácil, porque el fichero OLERead.php no está en ninguna parte del código que hemos descomprimido. En la linea 31 del fichero reader.php hay que poner require_once ´oleread.inc´;
Después de salvado este escollo el error es otro, incomprensiblemente , ninguno de los ficheros excel que he probado funcionan. El código me dice que los ficheros no se pueden leer. Investigando en el código podemos ver que en el fichero oleread.inc aparece...
// check if file exist and is readable (Darko Miljanovic)
if(!is_readable($sFileName)) {
$this->error = 1;
return false;
}
Lo cual comprueba si el fichero se puede leer, con la funcion is_readable(), la cual siempre retorna false (???)
He comentado esta parte del código y voila!!! funciona
// check if file exist and is readable (Darko Miljanovic)
//if(!is_readable($sFileName)) {
// $this->error = 1;
// return false;
//}
El código para leer un archivo excel es este...
require_once ´phpExcelReader/reader.php´; // ojo con la ruta de acceso del fichero reader.php
$data = new Spreadsheet_Excel_Reader();
$data->read($ruta_archivo);
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 " ";
}
IMPORTANTE: si copiais este código, debéis cambiar las comillas que aparecen en él, sustituyendo las que véis por las comillas simples (las de la tecla de interrogación, a la derecha del cero del teclado)
Que disfrutéis!!!
Autor: Oscar Hernández Caballero
ARTICULOS RELACIONADOS:
http://www.parentesys.es/Escribir-archivos-Excel-con-PHP-32858
Esta web se reserva el derecho de suprimir, por cualquier razón y sin previo aviso, cualquier contenido generado en los espacios de participación en caso de que los mensajes incluyan insultos, mensajes racistas, sexistas... Tampoco se permitirán los ataques personales ni los comentarios que insistan en boicotear la labor informativa de la web, ni todos aquellos mensajes no relacionados con la noticia que se esté comentando. De no respetarse estas mínimas normas de participación este medio se verá obligado a prescindir de este foro, lamentándolo sinceramente por todos cuantos intervienen y hacen en todo momento un uso absolutamente cívico y respetuoso de la libertad de expresión.
#12
Problema con PHPExcelRuben el 1 sep 2014 |
Buenas, tengo un problema con PHPExcel, tengo un siot web que esta en linea en intranet, ingreso al mismo desde otra PC de la red y quiero recorrer los datos del archivo excel y almacenarlos pero me sale errores diferentes al seleccionar un archivo de xls o xlsx.. Por favor ayuda..... |
#11
Agradecimientorollanime el 14 jul 2012 |
Excelente explicación había buscado la forma de hacerlo pero no encontraba. Aunque me tomo la primera parte la del CSV ya que me es más simple de esa forma para luego utilizarla en un Ciclo for(según lo que necesito) Muchas gracias nuevamente. Saludos |
#10
gracias por el datobien el 15 dic 2011 |
pense que era por el lado de PEAR pero era solo ajustar la linea que indicas. gracias!! |
#9
AyudaPOPEYE el 17 nov 2011 |
como hago para que en vez de abrir el archivo que indique en la ruta, me abra el que seleccione a traves de un formulario al dar click en el boton leer archivo. |
#8
Yo tengo un problema con los acentosV el 23 mar 2011 |
A mi me funcionaba correctamente pero en algunas celdas misteriosamente donde hay una tilde se corta y pasa a la celda siguiente. Los mas extraño es que NO LO HACE CON TOTAS LAS TILDES.. solo con algunas. En fin ojala encontremos algúna solución. Un saludo. |
#7
Buen AporteJimmy Toledano el 13 feb 2011 |
Gracias por el aporte, lo voy a probrar |
#6
ExcelenteHenry Vallenilla el 24 oct 2010 |
Brother, excelente aporte, me sirvio de gran ayuda. |
#5
Blog de pecesJesus | Blog de peces el 22 oct 2010 |
Gracias. |
#4
EngRen el 18 may 2010 |
Tengo el mismo problema a la hora de leer celdas que contienen fórmulas, y en ninguno de los foros que he visitado hay una respuesta sobre esta cuestión, es que sencillamente no tiene solución?, esto es un problema porque una de las ventajas de usar un fichero excel desde php, me parece que es la posibilidad de realizar cálculos en la hoja que luego sean mostrados en una página web. La librería es muy buena pero este es un gran escollo. |
#3
ProblemaReinier Ernesto el 12 dic 2009 |
Hola, he visto que esta libreria no lee las celdas que contengan formulas. O sea las devuelve en blanco, sabes la solucion a esto. Ejemplo: La celda A1 tiene dentro =A3(no devuelve nada cuando obtengo la celda A1 y eso es lo que necesito) Gracias por tu ayuda. |
#2
Fatal error: allowed memory sizeadmin el 12 nov 2009 |
Para solucionar este problema prueba con estas lineas de código al principio de tu página PHP ini_set("memory_limit",500M); set_time_limit(0); Con esto le dices al Apache que reserve 500 megas de memoria y que el proceso no tenga tiempo de expiración. Saludos y espero haberte ayudado. |
#1
preguntaKrathos el 6 nov 2009 |
que onda! de todos los pasos ke eh visto para instalar esta cosa, tu explicacion es la mejor... pero aun me marca error - Fatal error: Allowed memory size... el cual buske y enkontre este http://www.educasitio.com/fatal-error dice ke modifique el archivo php.ini y ponga memory_limit = 32M y cuando lo pongo recargo la pagina y no pasa nada, nunca carga, se queda cargando y como a la media hora ya me dice que hay un problema en el apache... por que pasa eso? o como solucionarlo?? gracias! |