Laravel-excel: [Pregunta] Cómo omitir filas vacías (3.1)

Creado en 29 oct. 2018  ·  12Comentarios  ·  Fuente: Maatwebsite/Laravel-Excel

  • Versión del paquete: 3.1

Descripción

¿Cómo omitir filas vacías en el documento?

more information needed

Comentario más útil

Hola,
He intentado usar $row->filter()->isNotEmpty() pero debido al hecho de que uso WithValidation, los códigos se detienen con un error de validación. Mis reglas se ven así:

public function rules(): array { return [ 'name' => 'required', '*.name' => 'required', 'email' => 'required|email', '*.email' => 'required|email', 'discount' => 'nullable|numeric', '*.discount' => 'nullable|numeric', ]; }

Desafortunadamente, si tiene un archivo de Excel y elimina el contenido de algunas filas al final del archivo de Excel, Laravel-Excel todavía las reconoce como no vacías. Entonces la validación falla. Quiero omitir esas filas antes de la validación.

Todos 12 comentarios

Gracias por enviar el ticket. Lamentablemente, la información que proporcionaste está incompleta. Necesitamos saber qué versión usas y cómo reproducirla. Incluya ejemplos de código. Antes de que podamos recogerlo, consulte (https://github.com/Maatwebsite/Laravel-Excel/blob/3.0/.github/ISSUE_TEMPLATE.md) y agregue la información que falta. Para facilitar mucho el procesamiento de este ticket, asegúrese de verificar (https://laravel-excel.maatwebsite.nl/docs/3.0/getting-started/contributing) y vuelva a verificar si completó 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.

Duplicado de #1834

use el método ToCollection para envolver todo dentro if($row->filter()->isNotEmpty())
```
colección de función pública (Colección $filas)
{
foreach ($filas como $fila) {
if($fila->filtro()->isNotEmpty()){
// tu lógica puede ir aquí

            $user = User::create([
                'name' => ucwords($row['name']),
                'class' => $row['class'],
                ...
            ]);
        }
    }   
}

```

¿Cómo funciona para la forma toModel?

Puede devolver nulo en toModel, omitirá esas filas.

Hola,
He intentado usar $row->filter()->isNotEmpty() pero debido al hecho de que uso WithValidation, los códigos se detienen con un error de validación. Mis reglas se ven así:

public function rules(): array { return [ 'name' => 'required', '*.name' => 'required', 'email' => 'required|email', '*.email' => 'required|email', 'discount' => 'nullable|numeric', '*.discount' => 'nullable|numeric', ]; }

Desafortunadamente, si tiene un archivo de Excel y elimina el contenido de algunas filas al final del archivo de Excel, Laravel-Excel todavía las reconoce como no vacías. Entonces la validación falla. Quiero omitir esas filas antes de la validación.

@seven21 , ¿encontró una solución para esto? ¿Alguien resolvió este problema?

Utilizo una solución alternativa que ayuda en mi caso. La validación se extiende por anulable en todas las filas para evitar errores y luego en el método que he agregado
public function model(array $row) {if(!array_filter($row)) { return null;} return new Customer([..... y omita estas filas en este punto. No estoy muy contento con esto, ya que no puedo devolver un mensaje de error útil, pero no encontré una solución que sea la mejor manera de ejecutar el código.

@ siete21 Muchas gracias por su instancia y mensaje útil, pero también creo que esta no es una buena manera si realmente usamos validaciones.

@mohamednizar , ¿cómo resolvió este problema?

No resolví el problema por completo, pero para mi solución agregué las siguientes funciones personalizadas para devolver el tamaño del lote y el límite de fila. el límite de fila solo se contará si existen datos en la columna.

 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;
        }
    }

En algún momento esto puede ayudarlo a resolver algún tipo de problema.

puede ignorar la fila vacía actualizando el archivo config/excel.php.

desde:

        /*
        |--------------------------------------------------------------------------
        | 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,

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