Como pular linhas vazias no documento?
Obrigado por enviar o boleto. Infelizmente as informações que você forneceu estão incompletas. Precisamos saber qual versão você usa e como reproduzi-la. Por favor, inclua exemplos de código. Antes que possamos pegá-lo, verifique (https://github.com/Maatwebsite/Laravel-Excel/blob/3.0/.github/ISSUE_TEMPLATE.md) e adicione as informações que faltam. Para tornar o processamento deste ticket muito mais fácil, certifique-se de verificar (https://laravel-excel.maatwebsite.nl/docs/3.0/getting-started/contributing) e verifique novamente se você preencheu o modelo de problema corretamente. Isso nos permitirá retirar seu bilhete com mais eficiência. Questões que seguem as diretrizes corretamente terão prioridade sobre outras questões.
Duplicata de #1834
use o método ToCollection para envolver tudo dentro de if($row->filter()->isNotEmpty())
```
coleção de função pública (Coleção $ linhas)
{
foreach($linhas como $linha) {
if($row->filter()->isNotEmpty()){
// sua lógica pode ir aqui
$user = User::create([
'name' => ucwords($row['name']),
'class' => $row['class'],
...
]);
}
}
}
```
Como funciona o modo toModel?
Você pode retornar null em toModel, pulará essas linhas.
Olá,
Eu tentei usar $row->filter()->isNotEmpty() mas devido ao fato de eu usar WithValidation os códigos param com um erro de validação. Minhas regras ficam assim:
public function rules(): array
{
return [
'name' => 'required',
'*.name' => 'required',
'email' => 'required|email',
'*.email' => 'required|email',
'discount' => 'nullable|numeric',
'*.discount' => 'nullable|numeric',
];
}
Infelizmente, se você tiver um arquivo excel e excluir o conteúdo de algumas linhas no final do arquivo excel, o Laravel-Excel ainda as reconhece como não vazias. Em seguida, a validação falha. Eu quero pular essas linhas antes da validação.
@seven21 , você encontrou uma solução para isso? alguém conseguiu resolver esse problema?
Eu uso uma solução alternativa que ajuda no meu caso. A validação é estendida por nullable em todas as linhas para evitar erros e, em seguida, no método que adicionei
public function model(array $row)
{if(!array_filter($row)) { return null;}
return new Customer([.....
e pule essas linhas neste momento. Não estou muito feliz com isso, pois não posso retornar uma mensagem de erro útil, mas como não encontrei solução, a melhor maneira de executar o código.
@seven21 Muito obrigado por sua instância e mensagem útil, mas também estou pensando que essa não é uma boa maneira se realmente usarmos validações.
@mohamednizar como você resolveu esse problema?
Não resolvi o problema completamente, mas para minha solução adicionei as seguintes funções personalizadas para retornar o tamanho do lote e o limite de linha. o limite de linhas só será contado se existirem dados na coluna.
public function limit(): int {
$highestColumn = $this->worksheet->getHighestDataColumn(3);
$higestRow = 0;
for ($row = $this->startRow(); $row <= $this->highestRow; $row++) {
$rowData = $this->worksheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
if (isEmptyRow(reset($rowData))) {
continue;
} else {
$higestRow += 1;
}
}
return $higestRow;
}
public function batchSize(): int {
$highestColumn = $this->worksheet->getHighestDataColumn(3);
$higestRow = 1;
for ($row = $this->startRow(); $row <= $this->highestRow; $row++) {
$rowData = $this->worksheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
if (isEmptyRow(reset($rowData))) {
continue;
} else {
$higestRow += 1;
}
}
if ($higestRow == 0) {
exit;
} else {
return $higestRow;
}
}
Algum tempo isso pode ajudá-lo a resolver algum tipo de problema.
você pode ignorar a linha vazia atualizando o arquivo config/excel.php.
a partir de:
/*
|--------------------------------------------------------------------------
| Ignore Empty
|--------------------------------------------------------------------------
|
| When dealing with imports, you might be interested in ignoring
| rows that have null values or empty strings. By default rows
| containing empty strings or empty values are not ignored but can be
| ignored by enabling the setting ignore_empty to true.
|
*/
'ignore_empty' => false,
para:
/*
|--------------------------------------------------------------------------
| Ignore Empty
|--------------------------------------------------------------------------
|
| When dealing with imports, you might be interested in ignoring
| rows that have null values or empty strings. By default rows
| containing empty strings or empty values are not ignored but can be
| ignored by enabling the setting ignore_empty to true.
|
*/
'ignore_empty' => true,
Comentários muito úteis
Olá,
Eu tentei usar $row->filter()->isNotEmpty() mas devido ao fato de eu usar WithValidation os códigos param com um erro de validação. Minhas regras ficam assim:
public function rules(): array { return [ 'name' => 'required', '*.name' => 'required', 'email' => 'required|email', '*.email' => 'required|email', 'discount' => 'nullable|numeric', '*.discount' => 'nullable|numeric', ]; }
Infelizmente, se você tiver um arquivo excel e excluir o conteúdo de algumas linhas no final do arquivo excel, o Laravel-Excel ainda as reconhece como não vazias. Em seguida, a validação falha. Eu quero pular essas linhas antes da validação.