web-dev-qa-db-fra.com

Lecture d'un fichier Excel et téléchargement dans la base de données Laravel 5

J'ai ce projet où je devrais pouvoir télécharger un fichier Excel et lire le contenu puis télécharger les informations dans la base de données. J'ai donc décidé d'utiliser une bibliothèque pour m'aider qui se révèle être Maatwebsite/Laravel-Excel

Mais j'ai essayé de lire la documentation http://www.maatwebsite.nl/laravel-Excel/docs/import mais je n'arrive pas à trouver celle dont j'ai besoin.

Par exemple, dans mon fichier Excel dans la première ligne John, Kennedy, Male qui dans ma base de données corrige First Name, Last Name, Gender. Comment puis-je le lire et le télécharger? Est-ce que quelqu'un peut m'aider?

Merci!

Mon code à partir de maintenant

public function postUploadCsv()
{
    $rules = array(
        'file' => 'required',
        'num_records' => 'required',
    );

    $validator = Validator::make(Input::all(), $rules);
    // process the form
    if ($validator->fails()) 
    {
        return Redirect::to('customer-upload')->withErrors($validator);
    }
    else 
    {
        $file = Input::file('file');
        dd($file);
        exit();
    } 
}
21
jackhammer013

étant donné que les noms de colonne de votre feuille Excel sont exactement comme les noms de colonne de base de données suivants suffisent,

ajouter la classe de contrôleur ci-dessus,

use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Support\Facades\Input;

et code fonction,

public function postUploadCsv()
{
    $rules = array(
        'file' => 'required',
        'num_records' => 'required',
    );

    $validator = Validator::make(Input::all(), $rules);
    // process the form
    if ($validator->fails()) 
    {
        return Redirect::to('customer-upload')->withErrors($validator);
    }
    else 
    {
        try {
            Excel::load(Input::file('file'), function ($reader) {

                foreach ($reader->toArray() as $row) {
                    User::firstOrCreate($row);
                }
            });
            \Session::flash('success', 'Users uploaded successfully.');
            return redirect(route('users.index'));
        } catch (\Exception $e) {
            \Session::flash('error', $e->getMessage());
            return redirect(route('users.index'));
        }
    } 
} 

[~ # ~] mise à jour [~ # ~]

Supposons que vous ayez plusieurs feuilles dans un classeur, vous aurez foreach supplémentaires pour parcourir les feuilles comme ci-dessous,

Excel::load(Input::file('file'), function ($reader) {

     $reader->each(function($sheet) {    
         foreach ($sheet->toArray() as $row) {
            User::firstOrCreate($row);
         }
     });
});

En savoir plus

Dans le cas où vous utilisez Laravel 5.3 et étant donné que vos colonnes de feuille Excel ne sont pas exactes

Utilisez le code suivant pour répondre à vos besoins

/**
 * Import file into database Code
 *
 * @var array
 */
public function importExcel(Request $request)
{
    if($request->hasFile('import_file')){

        $path = $request->file('import_file')->getRealPath();
        $data = Excel::load($path, function($reader) {})->get();

        if(!empty($data) && $data->count()){

            foreach ($data->toArray() as $key => $value) {

                if(!empty($value)){

                    foreach ($value as $v) {        

                        $insert[] = ['title' => $v['title'], 'description' => $v['description']];

                    }
                }
            }

            if(!empty($insert)){
                Item::insert($insert);
                return back()->with('success','Insert Record successfully.');
            }
        }
    }

    return back()->with('error','Please Check your file, Something is wrong there.');

}

Consultez le tutoriel complet ici

Notez que par défaut - Une fois vos données extraites de votre feuille Excel, tous les noms de colonnes sont convertis en minuscules et tous les espaces entre les noms sont remplacés par un soulignement.

40
pinkal vansia