Import EXCEL acontece exceção no PHP7.4,
Exceção-> mensagem () é:
Tentando acessar o deslocamento da matriz no valor do tipo int.
Comportamento esperado:
importar um arquivo xlsx enquanto executo o código no php72w
Comportamento real:
aconteceu depois de fazer o upload do meu servidor circunstância de php7.2 para php7.4 quando eu importo um Excel seria uma falha como acima.
seria normal novamente se eu fizesse o downgrade de php7.4 para php7.2.
$extension=$request->file()['file']->getClientOriginalExtension();
$extension[0] = strtoupper($extension[0]);
Excel::import(new RejectedImport(), $request->file()['file']->path(),null,$extension);
E o que está na classe de importação:
<?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,
]);
}
}
}
}
Obrigado por enviar o tíquete. Infelizmente, as informações fornecidas estão incompletas. Precisamos saber qual versão você usa e como reproduzi-la. Inclua exemplos de código. Antes de retirá-lo, verifique (https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/.github/ISSUE_TEMPLATE.md) e adicione as informações que faltam. Para tornar o processamento deste tíquete muito mais fácil, certifique-se de verificar (https://laravel-excel.maatwebsite.nl/3.1/getting-started/contributing.html) e verifique novamente se você preencheu o modelo de problema corretamente. Isso nos permitirá retirar sua passagem de forma mais eficiente. Os problemas que seguem as diretrizes corretamente terão prioridade sobre os outros problemas.
Você pode mostrar um pouco mais de rastreamento de pilha, não posso confirmar o bug ao usar o pacote no PHP7.4. Talvez seja algo em seu próprio código?
Olá @patrickbrouwers, obrigado pelo pacote, sou um grande fã dele!
Estou recebendo um erro semelhante após a atualização, embora seja durante uma exportação, e o stacktrace indica que o problema é com phpsreadsheet, não com Laravel-Excel, mas o Google me trouxe aqui.
Aqui está o rastreamento de pilha:
#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()
Corrigido em PhpSpreadsheet, consulte https://github.com/PHPOffice/PhpSpreadsheet/issues/1300
No arquivo PHPExcel "DefaultValueBinder.php", substitua esta linha 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
com o seguinte:
} elseif (0 === strpos ($ pValue, '=') && strlen ($ pValue)> 1) {
Isso corrigirá o erro "Tentando acessar o deslocamento da matriz no valor do tipo int". Mas você também precisará realizar uma localização e substituição de chaves em todo o código PHPExcel para resolver o erro "A sintaxe de acesso de deslocamento de array e string com chaves está obsoleta", que também afeta as atualizações do PHP para 7.4. Eu simplesmente os substituí por "[" e "]" em todos os lugares e tudo está funcionando bem novamente.
DefaultValueBinder.php dentro da pasta do vendedor? ou onde fica? mesmo problema aqui.
DefaultValueBinder.php dentro da pasta do vendedor? ou onde fica? mesmo problema aqui.
Me desculpe. Eu deveria ter sido mais específico. Na minha instalação, ele está localizado na pasta PHPExcel neste local: PHPExcel \ Cell \ DefaultValueBinder.php
Pode ser diferente da sua instalação. Mas você deve conseguir fazer uma busca por ele em seu sistema.
a linha eu acho que é 62, não 82 meu amigo! e eu espero que funcione porque estou estressado. Não consigo encontrar a solução para o erro em meu projeto: Erro ERROR: tentando acessar o deslocamento da matriz no valor do tipo int '/ Cell / DefaultValueBinder. php: 56 '. Tenho grandes esperanças!
Este é o caminho: third_party / PHPExcel / Classes / PHPExcel / Cell / DefaultValueBinder.php
Aqui, third_party significa onde você manteve sua pasta PHPExcel
Agora pesquise === '=' e verifique se há uma linha correspondente, em seguida, substitua por aquela específica para
0 === strpos ($ pValue, '=')
O resto seria o mesmo. No meu caso foi
$ pValue [0] === '='
No arquivo PHPExcel "DefaultValueBinder.php", substitua esta linha 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
com o seguinte:
} elseif (0 === strpos ($ pValue, '=') && strlen ($ pValue)> 1) {
Isso corrigirá o erro "Tentando acessar o deslocamento da matriz no valor do tipo int". Mas você também precisará realizar uma localização e substituição de chaves em todo o código PHPExcel para resolver o erro "A sintaxe de acesso de deslocamento de array e string com chaves está obsoleta", que também afeta as atualizações do PHP para 7.4. Eu simplesmente os substituí por "[" e "]" em todos os lugares e tudo está funcionando bem novamente.
funciona! amo você!
No arquivo PHPExcel "DefaultValueBinder.php", substitua esta linha 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
com o seguinte:
} elseif (0 === strpos ($ pValue, '=') && strlen ($ pValue)> 1) {
Isso corrigirá o erro "Tentando acessar o deslocamento da matriz no valor do tipo int". Mas você também precisará realizar uma localização e substituição de chaves em todo o código PHPExcel para resolver o erro "A sintaxe de acesso de deslocamento de array e string com chaves está obsoleta", que também afeta as atualizações do PHP para 7.4. Eu simplesmente os substituí por "[" e "]" em todos os lugares e tudo está funcionando bem novamente.
Quando eu estava quase fazendo downgrade para o PHP 7.3, obrigado cara, isso me ajudou
Alguma idéia de resolver este problema com PHP 7.4.3 & maatwebsite / excel versão 2.1?
Você teria que fazer um fork do pacote phpexcel obsoleto e manter o fork sozinho.
} elseif (0 === strpos($pValue, '=') && strlen($pValue) > 1) {
strpos de bool, rly?
Basta colocar este código após a verificação em is_bool e is_float
O código não faz parte deste pacote, mas sim do legado PhpExcel
No arquivo PHPExcel "DefaultValueBinder.php", substitua esta linha 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
com o seguinte:
} elseif (0 === strpos ($ pValue, '=') && strlen ($ pValue)> 1) {
Isso corrigirá o erro "Tentando acessar o deslocamento da matriz no valor do tipo int". Mas você também precisará realizar uma localização e substituição de chaves em todo o código PHPExcel para resolver o erro "A sintaxe de acesso de deslocamento de array e string com chaves está obsoleta", que também afeta as atualizações do PHP para 7.4. Eu simplesmente os substituí por "[" e "]" em todos os lugares e tudo está funcionando bem novamente.
Obrigado cara. Amei. Obrigado, @burello <3
A melhor coisa a fazer é atualizar o PHPOffice/PhpSpreadsheet
acima de 1.10 em seu projeto - porque então esse erro será corrigido sem a necessidade de editar manualmente a base de código do pacote. Então para mim
composer require phpoffice/phpspreadsheet "^1.10"
corrigiu o problema.
eu tenho esse erro também
já sem noção
No arquivo PHPExcel "DefaultValueBinder.php", substitua esta linha 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
com o seguinte:
} elseif (0 === strpos ($ pValue, '=') && strlen ($ pValue)> 1) {
Isso corrigirá o erro "Tentando acessar o deslocamento da matriz no valor do tipo int". Mas você também precisará realizar uma localização e substituição de chaves em todo o código PHPExcel para resolver o erro "A sintaxe de acesso de deslocamento de array e string com chaves está obsoleta", que também afeta as atualizações do PHP para 7.4. Eu simplesmente os substituí por "[" e "]" em todos os lugares e tudo está funcionando bem novamente.
Obrigado por trabalhar para mim !! orderimportexport.ocmod opencart 3x
No arquivo PHPExcel "DefaultValueBinder.php", substitua esta linha 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
com o seguinte:
} elseif (0 === strpos ($ pValue, '=') && strlen ($ pValue)> 1) {
Isso corrigirá o erro "Tentando acessar o deslocamento da matriz no valor do tipo int". Mas você também precisará realizar uma localização e substituição de chaves em todo o código PHPExcel para resolver o erro "A sintaxe de acesso de deslocamento de array e string com chaves está obsoleta", que também afeta as atualizações do PHP para 7.4. Eu simplesmente os substituí por "[" e "]" em todos os lugares e tudo está funcionando bem novamente.
Incrível, você me salvou mano, muito obrigado
substitua esta linha 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
com o seguinte:
} elseif (0 === strpos ($ pValue, '=') && strlen ($ pValue)> 1) {
trabalhando para mim ...
Por favor, reporte os erros dentro do PhpSpreadsheet para o PhpSpreadsheet.
Comentários muito úteis
No arquivo PHPExcel "DefaultValueBinder.php", substitua esta linha 82:
} elseif ($ pValue [0] === '=' && strlen ($ pValue)> 1) {
com o seguinte:
} elseif (0 === strpos ($ pValue, '=') && strlen ($ pValue)> 1) {
Isso corrigirá o erro "Tentando acessar o deslocamento da matriz no valor do tipo int". Mas você também precisará realizar uma localização e substituição de chaves em todo o código PHPExcel para resolver o erro "A sintaxe de acesso de deslocamento de array e string com chaves está obsoleta", que também afeta as atualizações do PHP para 7.4. Eu simplesmente os substituí por "[" e "]" em todos os lugares e tudo está funcionando bem novamente.