New question

Question:

Date: 10-05-2021 20:05:57 (In Spanish)

Problema con la lectura de la libreria PhpSpreadsheet[Unresolved]

Estoy intentando leer un archivo excel con la librería PhpSpreadsheet pero al momento de hacer la prueba me sale el siguiente error: "No se encontró ningún lector para el tipo phpdcbd.tmp" "No atrapado".

Este es mi código:

Agradezco su ayuda

 
     if(is_array($_FILES['archivoexcel']) && count ($_FILES['archivoexcel'])>0){
        //Llamando libreria del excel 
        require_once 'vendor/autoload.php';
        require_once 'conexion.php';

        $tmpfname = $_FILES['archivoexcel']['tmp_name'];

        //crear excel para luego leerlo
        $leerexcel = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($tmpfname);

        //cargando excel
        $excelobj = $leerexcel -> load($tmpfname);

        //Cargar la hoja en la que se trabajo
        $hoja = $excelobj -> getSheet(0);
        $filas = $hoja->getHighestRow();

        echo $filas;
    }

 

Tags: MySQL - PHP Votes: 1 - Answers: 5 - Views: 9 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 11-05-2021 08:50:24 Hola Jonathan:

    La librería PHPExcel está obsoleta.

    Prueba cambiarte a PHPSpreadhsheet.

    Saludos!
      Votes: 1 - Link answer
     
  • Date: 12-05-2021 06:15:29 Como bien menciona Mauro, PHPExcel está obsoleta, pero hay una herramienta de migración hacia PHPSpreadsheet (que, a propósito, es la siguiente versión de PHPExcel), esta aquí: https://github.com/PHPOffice/PhpSpreadsheet/blob/master/docs/topics/migration-from-PHPExcel.md   Votes: 0 - Link answer
     
  • Date: 12-05-2021 13:17:31 Hola Jonathan Robayo, si, como bien comenta Mauro y Juan, la librería PHPExcel está obsoleta, por lo que ante un nuevo desarrollo es conveniente que utilices algunas alternativa.

    Habiendo dicho esto, te cuento que he tenido que lidear con esta librería en servidores versión PHP 7.4.x y el único inconveniente que le encontre fue el error que reportas, que se resuelve relativamente fácil, debes remplazar las llaves { } por corchetes [ ] al momento de acceder a los elementos de los arrays

    El error original es: Error: Array and string offset access syntax with curly braces is deprecated

    Por ejemplo, para el error que reportas, en el archivo PHPExcel\Shared\String.php en la línea 526.
    En dicha linea tienes la función utf16_decode, a continuación la función original y su remplazo directo
    Remplazar:
        public static function utf16_decode($str, $bom_be = true)
        {
            if (strlen($str) < 2) {
                return $str;
            }
            $c0 = ord($str{0});
            $c1 = ord($str{1});
            if ($c0 == 0xfe && $c1 == 0xff) {
                $str = substr($str, 2);
            } elseif ($c0 == 0xff && $c1 == 0xfe) {
                $str = substr($str, 2);
                $bom_be = false;
            }
            $len = strlen($str);
            $newstr = '';
            for ($i=0; $i<$len; $i+=2) {
                if ($bom_be) {
                    $val = ord($str{$i})   << 4;
                    $val += ord($str{$i+1});
                } else {
                    $val = ord($str{$i+1}) << 4;
                    $val += ord($str{$i});
                }
                $newstr .= ($val == 0x228) ? "\n" : chr($val);
            }
            return $newstr;
        }
    

    Por:
        public static function utf16_decode($str, $bom_be = true)
        {
            if (strlen($str) < 2) {
                return $str;
            }
            $c0 = ord($str[0]);
            $c1 = ord($str[1]);
            if ($c0 == 0xfe && $c1 == 0xff) {
                $str = substr($str, 2);
            } elseif ($c0 == 0xff && $c1 == 0xfe) {
                $str = substr($str, 2);
                $bom_be = false;
            }
            $len = strlen($str);
            $newstr = '';
            for ($i=0; $i<$len; $i+=2) {
                if ($bom_be) {
                    $val = ord($str[$i])   << 4;
                    $val += ord($str[$i+1]);
                } else {
                    $val = ord($str[$i+1]) << 4;
                    $val += ord($str[$i]);
                }
                $newstr .= ($val == 0x228) ? "\n" : chr($val);
            }
            return $newstr;
        }
    


    Así debes hacer con todo, recuerda, debes cambiar los accesos de llaves { } por corchetes [ ]

    Saludos y buen código!
      Votes: 2 - Link answer
     
  • Date: 14-05-2021 20:56:50 Hola que tal.
    Gracias por la ayuda.
    Ya cambie a PhpSpreadsheet pero ahora me sale este error que no he podido corregir: "No se encontró ningún lector para el tipo phpdcbd.tmp" "No atrapado"

    if(is_array($_FILES['archivoexcel']) && count ($_FILES['archivoexcel'])>0){
            //Llamando libreria del excel 
            require_once 'vendor/autoload.php';
            require_once 'conexion.php';
            $tmpfname = $_FILES['archivoexcel']['tmp_name'];
            //crear excel para luego leerlo
            $leerexcel = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($tmpfname);
            //cargando excel
            $excelobj = $leerexcel -> load($tmpfname);
            //Cargar la hoja en la que se trabajo
            $hoja = $excelobj -> getSheet(0);
            $filas = $hoja->getHighestRow();
            echo $filas;
        }
      Votes: 0 - Link answer
     
  • Date: 17-05-2021 03:49:31 Hola Jonathan:

    Es posible que dada la extensión del archivo (.tmp), la librería no sea capaz de reconocer su tipo y, por lo tanto, asignar un reader apropiado.

    ¿Probaste abrir ese archivo directamente en Excel?
      Votes: 0 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In