web-dev-qa-db-ja.com

Excelファイルを読み込んでデータベースにアップロードするLaravel 5

このプロジェクトでは、Excelファイルをアップロードして内容を読み取り、情報をデータベースにアップロードできるはずです。そこで、私はライブラリを使用して Maatwebsite/Laravel-Excel

しかし、ドキュメントを読んでみました http://www.maatwebsite.nl/laravel-Excel/docs/import しかし、必要なドキュメントが見つからないようです。

たとえば、最初の行のExcelファイルでは、JohnKennedyMaleがデータベース内で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();
    } 
}
21
jackhammer013

excelシートの列名は、次のデータベース列名で十分であるため、

上記のコントローラクラスを追加し、

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

および機能コード、

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シートからデータが抽出されると、すべての列名が小文字に変換され、名前間のすべてのスペースがアンダースコアに置き換えられます。

40
pinkal vansia