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

时间:2015-07-13 07:38:47

标签: excel import laravel-5 laravel-excel

我有这个项目,我应该能够上传excel文件并读取内容,然后将信息上传到数据库。所以我决定使用一个库来帮助我变成Maatwebsite/Laravel-Excel

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

例如,在我的第一行JohnKennedyMale的Excel文件中 在我的数据库中对应First NameLast NameGender。 我该如何阅读并上传?有人能帮我吗?

谢谢!

我的代码截至目前

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

1 个答案:

答案 0 :(得分:33)

如果您的Excel工作表列名称与下面的数据库列名称完全相同,

添加以上控制器类,

use Maatwebsite\Excel\Facades\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 
    {
        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'));
        }
    } 
} 

<强>更新

假设您在工作簿中有多个工作表,您将有额外的foreach来迭代工作表,如下所示

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

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

Read More

如果您使用的是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.');

}

查看完整的教程here

默认情况下请注意 - 从excel表中提取数据后,所有列名称都将转换为小写,名称之间的所有空格都将替换为下划线。