读取excel文件并上传到数据库Laravel 5

我有这个项目,我应该能够上传一个Excel文件,并阅读内容,然后上传信息到数据库。 所以我决定用一个图书馆来帮助我,这就是Maatwebsite / Laravel-Excel

但我试过阅读文档http://www.maatwebsite.nl/laravel-excel/docs/import,但我似乎无法find我需要的。

例如在我的第一行的JohnKennedyMale在我的数据库中的对应的First NameLast NameGender Excel文件。 我怎样才能读取和上传? 有人能帮我吗?

谢谢!

我的代码截至目前

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

考虑到你的excel表单的列名与数据库列名完全一致,

添加以下控制器类,

 use Maatwebsite\Excel\Facades\Excel; 

和function代码,

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

UPDATE

假设你在一个工作簿中有多个工作表,你将有额外的foreach循环如下所示的工作表,

 Excel::load(Input::file('file'), function ($reader) { $reader->each(function($sheet) { foreach ($sheet->toArray() as $row) { User::firstOrCreate($row); } }); }); 

阅读更多

如果您使用的是Laravel 5.3,并且您的Excel表格列不准确

使用以下代码来满足您的需求

  /** * 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.'); } 

看看这里的完整教程

请注意,默认情况下 – 一旦从Excel表格中提取数据,所有列名称都将转换为小写字母,名称之间的所有空格都将replace为下划线。