Laravel-excel: [ERROR] La importación de EXCEL ocurre una excepción en PHP7.4, respuesta: Intentando acceder al desplazamiento de la matriz en el valor de tipo int

Creado en 5 dic. 2019  ·  24Comentarios  ·  Fuente: Maatwebsite/Laravel-Excel

Versiones

  • Versión de PHP: PHP7.4 (Centos7 yum instaló php74 forma remisrepo versión estable)
  • Versión de Laravel: Laravel Framework 5.8.35
  • Versión del paquete: maatwebsite / excel 3.1.17

Descripción

Importar EXCEL ocurre una excepción en PHP7.4,
Excepción-> mensaje () es:
Intentando acceder a la compensación de la matriz en un valor de tipo int.

Pasos para reproducir

Comportamiento esperado:

importar un archivo xlsx mientras ejecuto el código en php72w

Comportamiento real:
sucedió después de que cargué las circunstancias de mi servidor de php7.2 a php7.4 cuando importo un Excel fallaría como el anterior.

sería normal de nuevo si bajara de php7.4 a php7.2.

Información Adicional

$extension=$request->file()['file']->getClientOriginalExtension();
$extension[0] = strtoupper($extension[0]);
Excel::import(new RejectedImport(), $request->file()['file']->path(),null,$extension);

Y lo que hay en la clase de importación:

<?php

namespace App\Imports;

use App\Commodity;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;

class CommodityImport implements ToCollection, WithHeadingRow
{
    protected $isOverride=false;
    public function __construct($isOverride)
    {
        if($isOverride=='1')
            $this->isOverride=true;
    }

    /**
     * <strong i="26">@param</strong> Collection $collections
     */
    public function collection(Collection $collections)
    {
        foreach ($collections as $row)
        {
            $barcode = $row['barcode'] ?? $row['BARCODE'] ?? $row['Barcode'];
            if(!$barcode)continue;
            $name = $row['name'] ?? $row['NAME'] ?? $row['Name'] ?? '';
            $sku = $row['sku'] ?? $row['SKU'] ?? $row['Sku'] ?? '';
            $owner = $row['owner'] ?? $row['owner_name'] ?? $row['OWNER'] ?? $row['Owner'] ?? '';
            $commodity=Commodity::where('barcode',$row['barcode'])->first();
            if($commodity){
                if($this->isOverride){
                    $name?$commodity['name']= $name:false;
                    $sku?$commodity['sku']= $sku:false;
                    $owner?$commodity['owner_name']= $owner:false;
                    $commodity->update();
                }
            }else{
                Commodity::create([
                    'name' => $name,
                    'sku' => $sku,
                    'owner_name' => $owner,
                    'barcode' => $barcode,
                ]);
            }
        }
    }
}
bug

Comentario más útil

En el archivo PHPExcel "DefaultValueBinder.php", reemplace esta línea 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
con lo siguiente:
} elseif (0 === strpos ($ pValue, '=') && strlen ($ pValue)> 1) {
Esto solucionará el error "Intentando acceder al desplazamiento de la matriz en un valor de tipo int". Pero también necesitará realizar una búsqueda y reemplazo de llaves en todo el código PHPExcel para abordar el error "La sintaxis de acceso de desplazamiento de cadenas y matrices con llaves está en desuso" que también afecta las actualizaciones de PHP a 7.4. Simplemente los reemplacé con "[" y "]" en todas partes y todo vuelve a funcionar bien.

Todos 24 comentarios

Gracias por enviar el ticket. Lamentablemente, la información que proporcionó está incompleta. Necesitamos saber qué versión usa y cómo reproducirla. Incluya ejemplos de código. Antes de que podamos recogerlo, verifique (https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/.github/ISSUE_TEMPLATE.md) y agregue la información que falta. Para facilitar el procesamiento de este boleto, asegúrese de verificar (https://laravel-excel.maatwebsite.nl/3.1/getting-started/contributing.html) y vuelva a verificar si ha completado la plantilla de problema correctamente. Esto nos permitirá recoger su boleto de manera más eficiente. Los problemas que sigan las pautas correctamente tendrán prioridad sobre otros problemas.

¿Puede mostrar un poco más de seguimiento de pila? No puedo confirmar el error cuando uso el paquete en PHP7.4. ¿Quizás es algo en tu propio código?

Hola @patrickbrouwers, gracias por el paquete, ¡soy un gran admirador!

Recibo un error similar después de la actualización, aunque es durante una exportación, y el stacktrace indica que el problema es con la hoja de cálculo phps, no con Laravel-Excel, pero Google me trajo aquí.

Aquí está el stacktrace:

#0 /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/DefaultValueBinder.php(56): Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError()
#1 /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/DefaultValueBinder.php(34): PhpOffice\\PhpSpreadsheet\\Cell\\DefaultValueBinder::dataTypeForValue()
#2 /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Cell.php(184): PhpOffice\\PhpSpreadsheet\\Cell\\DefaultValueBinder->bindValue()
#3 /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Worksheet.php(2510): PhpOffice\\PhpSpreadsheet\\Cell\\Cell->setValue()
#4 /vendor/maatwebsite/excel/src/Sheet.php(402): PhpOffice\\PhpSpreadsheet\\Worksheet\\Worksheet->fromArray()
#5 /vendor/maatwebsite/excel/src/Sheet.php(502): Maatwebsite\\Excel\\Sheet->append()
#6 /vendor/maatwebsite/excel/src/Sheet.php(368): Maatwebsite\\Excel\\Sheet->appendRows()
#7 /vendor/maatwebsite/excel/src/Sheet.php(195): Maatwebsite\\Excel\\Sheet->fromCollection()
#8 /vendor/maatwebsite/excel/src/Writer.php(73): Maatwebsite\\Excel\\Sheet->export()
#9 /vendor/maatwebsite/excel/src/Excel.php(176): Maatwebsite\\Excel\\Writer->export()
#10 /vendor/maatwebsite/excel/src/Excel.php(97): Maatwebsite\\Excel\\Excel->export()
#11 /app/Console/Commands/EmailCardRequestList.php(89): Maatwebsite\\Excel\\Excel->store()

Corregido en PhpSpreadsheet, consulte https://github.com/PHPOffice/PhpSpreadsheet/issues/1300

En el archivo PHPExcel "DefaultValueBinder.php", reemplace esta línea 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
con lo siguiente:
} elseif (0 === strpos ($ pValue, '=') && strlen ($ pValue)> 1) {
Esto solucionará el error "Intentando acceder al desplazamiento de la matriz en un valor de tipo int". Pero también necesitará realizar una búsqueda y reemplazo de llaves en todo el código PHPExcel para abordar el error "La sintaxis de acceso de desplazamiento de cadenas y matrices con llaves está en desuso" que también afecta las actualizaciones de PHP a 7.4. Simplemente los reemplacé con "[" y "]" en todas partes y todo vuelve a funcionar bien.

DefaultValueBinder.php dentro de la carpeta del proveedor? o donde esta el mismo problema aqui.

DefaultValueBinder.php dentro de la carpeta del proveedor? o donde esta el mismo problema aqui.

Mis disculpas. Debí haber sido más especifico. En mi instalación, se encuentra en la carpeta PHPExcel en esta ubicación: PHPExcel \ Cell \ DefaultValueBinder.php
Puede variar de su instalación. Pero debería poder ejecutar una búsqueda en su sistema.

la línea creo que es el 62, no el 82 mi amigo! y espero que funcione porque estoy estresado. No puedo encontrar la solución al error en mi proyecto: Error ERROR: Intentando acceder al desplazamiento de la matriz en el valor de tipo int '/ Cell / DefaultValueBinder. php: 56 '. ¡Tengo muchas esperanzas!

Esta es la ruta: third_party / PHPExcel / Classes / PHPExcel / Cell / DefaultValueBinder.php
Aquí third_party significa dónde ha guardado su carpeta PHPExcel

Ahora busque === '=' y verifique si hay una línea coincidente y luego reemplácela con esa en particular para
0 === strpos ($ pValue, '=')
El descanso sería el mismo. En mi caso fue
$ pValue [0] === '='

En el archivo PHPExcel "DefaultValueBinder.php", reemplace esta línea 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
con lo siguiente:
} elseif (0 === strpos ($ pValue, '=') && strlen ($ pValue)> 1) {
Esto solucionará el error "Intentando acceder al desplazamiento de la matriz en un valor de tipo int". Pero también necesitará realizar una búsqueda y reemplazo de llaves en todo el código PHPExcel para abordar el error "La sintaxis de acceso de desplazamiento de cadenas y matrices con llaves está en desuso" que también afecta las actualizaciones de PHP a 7.4. Simplemente los reemplacé con "[" y "]" en todas partes y todo vuelve a funcionar bien.

¡funciona! ¡te amo!

En el archivo PHPExcel "DefaultValueBinder.php", reemplace esta línea 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
con lo siguiente:
} elseif (0 === strpos ($ pValue, '=') && strlen ($ pValue)> 1) {
Esto solucionará el error "Intentando acceder al desplazamiento de la matriz en un valor de tipo int". Pero también necesitará realizar una búsqueda y reemplazo de llaves en todo el código PHPExcel para abordar el error "La sintaxis de acceso de desplazamiento de cadenas y matrices con llaves está en desuso" que también afecta las actualizaciones de PHP a 7.4. Simplemente los reemplacé con "[" y "]" en todas partes y todo vuelve a funcionar bien.

Cuando casi estaba bajando a PHP 7.3, gracias, esto me ayudó.

¿Alguna idea para resolver este problema con PHP 7.4.3 y maatwebsite / excel versión 2.1?

Tendría que bifurcar el paquete phpexcel obsoleto y mantener la bifurcación usted mismo.

} elseif (0 === strpos($pValue, '=') && strlen($pValue) > 1) {

strpos de bool, rly?

Simplemente coloque este código después de verificar en is_bool e is_float

El código no es parte de este paquete, sino de PhpExcel heredado

En el archivo PHPExcel "DefaultValueBinder.php", reemplace esta línea 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
con lo siguiente:
} elseif (0 === strpos ($ pValue, '=') && strlen ($ pValue)> 1) {
Esto solucionará el error "Intentando acceder al desplazamiento de la matriz en un valor de tipo int". Pero también necesitará realizar una búsqueda y reemplazo de llaves en todo el código PHPExcel para abordar el error "La sintaxis de acceso de desplazamiento de cadenas y matrices con llaves está en desuso" que también afecta las actualizaciones de PHP a 7.4. Simplemente los reemplacé con "[" y "]" en todas partes y todo vuelve a funcionar bien.

Gracias hombre. Me encantó. Thankx @burello <3

Lo mejor que puede hacer es actualizar PHPOffice/PhpSpreadsheet encima de 1.10 en su proyecto, porque entonces este error se solucionará sin tener que editar manualmente el código base del paquete. Asi que para mi

composer require phpoffice/phpspreadsheet "^1.10"

solucionó el problema.

yo también tengo este error

ya desorientado

En el archivo PHPExcel "DefaultValueBinder.php", reemplace esta línea 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
con lo siguiente:
} elseif (0 === strpos ($ pValue, '=') && strlen ($ pValue)> 1) {
Esto solucionará el error "Intentando acceder al desplazamiento de la matriz en un valor de tipo int". Pero también necesitará realizar una búsqueda y reemplazo de llaves en todo el código PHPExcel para abordar el error "La sintaxis de acceso de desplazamiento de cadenas y matrices con llaves está en desuso" que también afecta las actualizaciones de PHP a 7.4. Simplemente los reemplacé con "[" y "]" en todas partes y todo vuelve a funcionar bien.

Gracias trabajando para mi !! orderimportexport.ocmod opencart 3x

En el archivo PHPExcel "DefaultValueBinder.php", reemplace esta línea 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
con lo siguiente:
} elseif (0 === strpos ($ pValue, '=') && strlen ($ pValue)> 1) {
Esto solucionará el error "Intentando acceder al desplazamiento de la matriz en un valor de tipo int". Pero también necesitará realizar una búsqueda y reemplazo de llaves en todo el código PHPExcel para abordar el error "La sintaxis de acceso de desplazamiento de cadenas y matrices con llaves está en desuso" que también afecta las actualizaciones de PHP a 7.4. Simplemente los reemplacé con "[" y "]" en todas partes y todo vuelve a funcionar bien.

Increíble, me salvaste hermano, muchas gracias

reemplace esta línea 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
con lo siguiente:
} elseif (0 === strpos ($ pValue, '=') && strlen ($ pValue)> 1) {

trabajando para mi ...

image

Informe los errores dentro de PhpSpreadsheet a PhpSpreadsheet.

¿Fue útil esta página
0 / 5 - 0 calificaciones