es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Evitando columnas y celdas vacías.

Estoy utilizando laravel-excel para importar una gran cantidad de datos que se encuentran en hojas de cálculo. Estas hojas de cálculo tienen la primera columna y las primeras 3 filas vacías (como en la imagen de abajo) y esto está causando un resultado inesperado al imprimir en pantalla:

Array ( [] => )
Array ( [] => )
Array ( [] => Email )
Array ( [] => jsimpson@email.com )
Array ( [] => spider@man.com )
Array ( [] => im@legend.com ) 

Si muevo manualmente el contenido de la tabla hacia la izquierda y hacia arriba, todo ocurre como debería:

Array ( [firstname] => John [lastname] => Simpson [age] => 36 [email] => jsimpson@email.com )
...

¿Cómo evitar estas columnas y celdas vacías o moverlas?

Ejemplo de la hoja de cálculo:
Imagen de descripción de entrada
Mi código:

 $row['firstname'],
            'last_name' => $row['lastname'],
            'age' => $row['age'],
            'email' => $row['email'],
        ]);
    }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema aquí es que la preocupación WithHeadingRow asume que la primera fila de la hoja de cálculo contiene encabezados para cada columna, y por lo tanto ignora esa fila al importar los datos. Sin embargo, parece que en este caso, la primera fila no se utiliza como fila de encabezado y en su lugar, contiene celdas vacías.

    Para evitar las celdas vacías, puedes utilizar la preocupación FromView en lugar de la preocupación WithHeadingRow. Esto te permitirá saltar las primeras filas que contienen celdas vacías y comenzar a importar datos desde la primera fila con datos reales.

    Aquí tienes un ejemplo de cómo modificar tu código para utilizar la preocupación FromView:

    <?php
    namespace App\Imports;
    
    use App\Models\User;
    use Maatwebsite\Excel\Concerns\FromView;
    use Maatwebsite\Excel\Concerns\InteractsWithView;
    
    class UserImport implements FromView, InteractsWithView 
    {
        /**
         * @return \Illuminate\Contracts\View\View
         */
        public function view(): \Illuminate\Contracts\View\View
        {
            $data = \Excel::toArray([], request()->file('users-import')); // asumiendo que estás obteniendo el archivo de la solicitud
    
            $headers = $data[0][3]; // asumiendo que los encabezados están presentes en la cuarta fila
            $rows = array_slice($data[0], 4); // asumiendo que las primeras 4 filas están vacías
    
            return view('imports.users', [
                'headers' => $headers,
                'rows' => $rows,
            ]);
        }
    
        public function model(array $row)
        {
            return new User([
                'first_name' => $row['firstname'],
                'last_name' => $row['lastname'],
                'age' => $row['age'],
                'email' => $row['email'],
            ]);
        }
    }
    

    En este ejemplo, utilizamos la preocupación FromView para importar datos desde una hoja de cálculo. Primero obtenemos los datos de la hoja de cálculo utilizando el método toArray y luego cortamos las primeras 4 filas que contienen celdas vacías. Luego pasamos los encabezados y las filas a una vista, que devolvemos desde el método view de la clase.

    Luego utilizamos el método model para asignar las columnas de cada fila a los campos correspondientes del modelo User. Esto debería ignorar las celdas vacías e importar los datos correctamente.

    Ten en cuenta que este ejemplo asume que los encabezados están presentes en la cuarta fila y que no hay otras celdas vacías en los datos. Es posible que debas ajustar el código si tu hoja de cálculo tiene una estructura diferente.

Comments are closed.