php excel reader

Notice: Uninitialized string offset: -512 in oleread.inc on line 27

En servidores que tienen procesador de 64 bits, la función GetInt4d de oleread.inc no funciona adecuadamente. Esta función no causa problemas en procesadores de 32 bits.

Andreas Rehm ha hackeado esta función para garantizar que devuelva el resultado correcto del bloque <<24 en procesadores de 32 y 64 bits, solo es necesario reemplazar el código original de la función GetInt4d del archivo oleread.inc como se muestra a continuación

function GetInt4d($data, $pos) {
return
ord($data[$pos]) | (ord($data[$pos+1]) << 8) | (ord($data[$pos+2]) << 16) | (ord($data[$pos+3]) << 24);
}

Reemplazar el código de la función por:

function GetInt4d($data, $pos) {
$_or_24 = ord($data[$pos+3]);
$_or_24 >=128 ? $_ord_24 = -abs((256-$_or_24) << 24) : $_ord_24 = ($_or_24&127) << 24;
return
ord($data[$pos]) | (ord($data[$pos+1]) << 8) | (ord($data[$pos+2]) << 16) | $_ord_24;
}

Actualización (08-Junio-2008):

Por si alguien lo necesita, dejo un zip con un ejemplo de utilización de php excel reader.

Anuncios

23 pensamientos en “php excel reader

  1. despues de modificar la funcion GetInt4d me arroja el siguiente error
    “Fatal error: Call to undefined method Spreadsheet_Excel_Reader::_GetInt4d() ”
    que puedo hacer en este caso
    yo cambie todos los codigos… o a lo mejor solo se modifica el olread.inc
    por favor si pudiesen ayudarme

  2. Si gustas, puedo enviarte la versión que yo utilizo para la apertura de los archivos .xls (excel XP/2003) con php.

    Saludos!

  3. Hola Amigos, soy nuevo en lo de PHP pero estoy tratando de hacer funcionar el php excelreader sin enconrar una solucion, me genera el mimo error que a Jorge, valar me podrias ayudar.
    Saludos

  4. Hola a todos, me parece que yo estoy teniendo el mismo error con la función GetInt4d.
    No soy capaz de verlo.
    Si me pudiérais ayudar, os estaría muy agradecido.

    Saludos.

  5. tengo un problema para hacer funcionar el excel reader, dice que se excedio el limite de memoria en el archivo oleread.php, aumente el limite de memoria de 32 a 128 megas y sigue dando el mismo error, alguien sabe como solucionar esto???

  6. Tu procesador ha de ser 64 bits.. seguramente.
    Si es el caso, sigue las instrucciones de la publicación que te indican como corregir el “error”

  7. HOLA: AMIGO, SI ERES TAN GENTIL, ME PUEDES AYUDAR CON CUALQUIER PROGRAMA FUENTE HECHO EN LENGUAJE C, PARA LUEGO COMPILAR EN TURBO C, o EN C BAJO DOS. QUE REALICE LO SIGUIENTE:
    El trabajo de Lenguaje C, se trata de lo siguiente:
    Se debe hacer un programa que simule a un compilador considerando la etapa lexicográfico que consiste en programar un puntero para que se mueva y analice letra por letra de cada instrucción del programa en lenguaje fuente Lenguaje C, y al final de cada palabra/instrucción el programa determine si es una palabra reservada, una función, identificador, etc , al final de la ejecución el programa deberá desplegar en pantalla los resultados de éste análisis, es decir, (tipo, valor): para lo cual debemos cargar puede ser en una matriz las palabras reservadas, funciones, identificadores, librerías o en tablas independientes, que representaran los tipos, y las instrucciones representaran el valor. Ejemplo: al character #, el puntero luego de analizar deberá desplegar el siguiente análisis: (almohadilla, #).
    Para el caso del texto el análisis es letra por letra, lo importante es que despliegue en pantalla todo el resultado del análisis lexicográfico.
    PROGRAMA FUENTE EN “C”.
    # include
    Main ()
    {
    Printf (“HOLA”);
    Printf (“DEBER”);
    Printf (“\n”);
    }
    EL PROGRAMA AL EJECUTAR DEBE DESPLEGAR EN PANTALLA EXACTAMENTE EL SIGUIENTE ANÁLISIS LEXICOGRÁFICO:
    (TIPO, VALOR)
    (almohadilla, “#”)
    (palabra reservada, include)
    (operador, )
    (palabra reservada, main)
    (signo de agrupación, “(” )
    (signo de agrupación, “)” )
    (delimitador, “{“ )
    (función, printf)
    (signo de agrupación, “(” )
    (literal, “ )
    (literal, “H”)
    (literal, “O”)
    (literal, “L”)
    (literal, “A”)
    (literal, “ )
    (signo de agrupación, “)” )
    (función, printf)
    (signo de agrupación, “(” )
    (literal, “ )
    (literal, “D”)
    (literal, “E”)
    (literal, “B”)
    (literal, “E”)
    (literal, “R”)
    (literal, “ )
    (signo de agrupación, “)” )
    (función, printf)
    (signo de agrupación, “(” )
    (literal, “ )
    (literal, “\” )
    (literal, “n”)
    (literal, “ )
    (signo de agrupación, “)” )
    (delimitador, “{“)

    TE QUEDARÍA MUY AGRADECIDO, MUCHÍSIMAS GRACIAS.
    UN ABRAZO GRANDE
    July
    MIL GRACIAS NECESITO PARA YA……
    jcalhsm@yahoo.es
    jcalh@hotmail.com

  8. Valar podrias enviarme el reader.php y el oleread.inc con un ejemplo .. he cambiado GetInt4d pero sigue igual el problema que tengo al leer mis archivos excel 2003 es que no captura los caractes especiales como la ñ, Ñ, ‘, “, %, etc.

    necesito tu ayuda por favor.

  9. la funcion que tengo es diferente al que tu muestras :

    function GetInt4d($data, $pos)
    {
    $value = ord($data[$pos]) | (ord($data[$pos+1]) << 8) | (ord($data[$pos+2]) << 16) | (ord($data[$pos+3]) <=4294967294)
    {
    $value=-2;
    }
    return $value;
    }

  10. El que tiene el error de Spreadsheet_Excel_Reader lo mas seguro es que sean problemas de lecturas de archivos en el servidor por problemas de permisos de lectura sobre las instrucciones fread, Spreadsheet_Excel_Reader, is_dir, is_file y cualquiera que trate de leer lso archivos en el server

  11. la funcion que tengo es:

    function GetInt4d($data, $pos)
    {
    $value = ord($data[$pos]) | (ord($data[$pos+1]) << 8) | (ord($data[$pos+2]) << 16) | (ord($data[$pos+3]) <=4294967294)
    {
    $value=-2;
    }
    return $value;
    }

    y me esta presentando este error con la lectura de archivos de excel grandes:

    Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 35 bytes) in C:\xampp\htdocs\cemex\Excel\reader.php on line 1009

    Me podrias ayudar, que puedo hacer???
    Gracias!!

  12. Formulas dos puntos
    Tego el excel reader pero no me muestra aquellas celdas que tienen formulas en su contenido quieiesra saber como hago para remediar esto

    GRacias de ante mano

  13. Hola, si alguien me puede hechar la mano con el siguiente problema con excel reader:
    Al subir archivos xls, localmente lo hace bien, peeeeero, cuando ya intentas subir un xls desde una máquina remota, dice que “FILE TEST.XLS IS NO T READABLE”.
    ¿Quien me puede ayudarrrr?

  14. seguramente es algo relacionado al “path” del archivo, es decir.. la ruta en la cual está almacenado.

    Puedes hacer lo siguiente:
    subir el archivo
    verificar si es del tipo excel
    mover el archivo de su ubicación temporal a una carpeta que tu definas
    si no es de excel, borrarlo de su ubicación temporal
    leer el archivo con excel_reader.

    saludos.

  15. Hola.
    Estoy tratando de abrir un excel5 de 28 KB de una sola hoja. He subido el límite de memoria en el php.ini a 512 MB y reinicado mi apache, pero no obstante me sigue diciendo que

    Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 60 bytes)

    alguna sugerencia…
    Algo más, yo sólo estoy interesado en leer desde un excel, si conocen alguna clase más simple, pero tan eficaz como esta me sería muy útil.

  16. Buenas tardes, tengo un problema con este lector de xls.

    Estoy intentando leer un xls que he creado yo y me sale el siguiente error:

    No se puede abrir el archivo edc_010109.xls.

    El fichero ocupa 9k asi que no sera un problema de tamaño.

    Si alguien me puede ayudar se lo agradeceria

  17. Me has salvado la vida!!!, tengo una aplicacion funcionando hace tiempo sin problemas y ahora, al mudarnos a un nuevo servidor no me leia los excel, me tiraba error de memoria!!, y bueno analisandolo lo unico que habia cambiado era la tecnologia de 32 a 64bits…

  18. Hola Valar, probe el ejemplo enviado por ti, y funciona bien, pero cuando selecciono otro archivo excel sale el siguiente mensaje “No se puede abrir el archivo XXX.xls”. Podrias decirme que hice mal, te lo agradeceré.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s